gh-156476: Ignore timeout in `_PySimpleQueue.get()` when block is false (#156477)
Co-authored-by: Stan Ulbrych <stan@python.org>
diff --git a/Lib/queue.py b/Lib/queue.py
index c0b3598..80db0b9 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 f2898de..e1a4515 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 0000000..c92fce3
--- /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`.