diff --git a/Lib/queue.py b/Lib/queue.py index c0b359876543f7..80db0b978b9c00 100644 --- a/Lib/queue.py +++ b/Lib/queue.py @@ -346,7 +346,9 @@ def get(self, block=True, timeout=None): available, else raise the Empty exception ('timeout' is ignored in that case). ''' - if timeout is not None and timeout < 0: + if not block: + timeout = None + elif timeout is not None and timeout < 0: raise ValueError("'timeout' must be a non-negative number") if not self._count.acquire(block, timeout): raise Empty diff --git a/Lib/test/test_queue.py b/Lib/test/test_queue.py index f2898de469e349..e1a4515500625b 100644 --- a/Lib/test/test_queue.py +++ b/Lib/test/test_queue.py @@ -956,6 +956,11 @@ def test_negative_timeout_raises_exception(self): with self.assertRaises(ValueError): q.get(timeout=-1) + def test_nonblocking_ignores_timeout(self): + q = self.q + with self.assertRaises(self.queue.Empty): + q.get(block=False, timeout=-1) + def test_order(self): # Test a pair of concurrent put() and get() q = self.q diff --git a/Misc/NEWS.d/next/Library/2026-08-28-00-59-00.gh-issue-156476.rQhxc7.rst b/Misc/NEWS.d/next/Library/2026-08-28-00-59-00.gh-issue-156476.rQhxc7.rst new file mode 100644 index 00000000000000..c92fce3bc05969 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-08-28-00-59-00.gh-issue-156476.rQhxc7.rst @@ -0,0 +1,3 @@ +The pure Python implementation of :meth:`queue.SimpleQueue.get` now ignores +*timeout* when *block* is false, matching the documented behavior and +the C implementation. It previously raised :exc:`ValueError`.