Mailing List Archive

gh-96471: Correct documentation for asyncio queue shutdown (#117621)
https://github.com/python/cpython/commit/e16062dd3428a5846344e0a8c6ee2f352d34ce1b
commit: e16062dd3428a5846344e0a8c6ee2f352d34ce1b
branch: main
author: Laurie O <laurie_opperman@hotmail.com>
committer: gvanrossum <gvanrossum@gmail.com>
date: 2024-04-08T14:50:54Z
summary:

gh-96471: Correct documentation for asyncio queue shutdown (#117621)

files:
M Doc/library/asyncio-queue.rst
M Doc/whatsnew/3.13.rst
M Lib/asyncio/queues.py

diff --git a/Doc/library/asyncio-queue.rst b/Doc/library/asyncio-queue.rst
index 030d4310942d7a..9b579cc1d5fdfe 100644
--- a/Doc/library/asyncio-queue.rst
+++ b/Doc/library/asyncio-queue.rst
@@ -106,9 +106,10 @@ Queue
raise once the queue is empty. Set *immediate* to true to make
:meth:`~Queue.get` raise immediately instead.

- All blocked callers of :meth:`~Queue.put` will be unblocked. If
- *immediate* is true, also unblock callers of :meth:`~Queue.get`
- and :meth:`~Queue.join`.
+ All blocked callers of :meth:`~Queue.put` and :meth:`~Queue.get`
+ will be unblocked. If *immediate* is true, a task will be marked
+ as done for each remaining item in the queue, which may unblock
+ callers of :meth:`~Queue.join`.

.. versionadded:: 3.13

diff --git a/Doc/whatsnew/3.13.rst b/Doc/whatsnew/3.13.rst
index 9e40bf04c49bfa..0fe2dafbfd6f02 100644
--- a/Doc/whatsnew/3.13.rst
+++ b/Doc/whatsnew/3.13.rst
@@ -298,7 +298,7 @@ asyncio

* Add :meth:`asyncio.Queue.shutdown` (along with
:exc:`asyncio.QueueShutDown`) for queue termination.
- (Contributed by Laurie Opperman in :gh:`104228`.)
+ (Contributed by Laurie Opperman and Yves Duprat in :gh:`104228`.)

base64
------
diff --git a/Lib/asyncio/queues.py b/Lib/asyncio/queues.py
index b8156704b8fc23..2f3865114a84f9 100644
--- a/Lib/asyncio/queues.py
+++ b/Lib/asyncio/queues.py
@@ -256,8 +256,9 @@ def shutdown(self, immediate=False):
By default, gets will only raise once the queue is empty. Set
'immediate' to True to make gets raise immediately instead.

- All blocked callers of put() will be unblocked, and also get()
- and join() if 'immediate'.
+ All blocked callers of put() and get() will be unblocked. If
+ 'immediate', a task is marked as done for each item remaining in
+ the queue, which may unblock callers of join().
"""
self._is_shutdown = True
if immediate:
@@ -267,6 +268,7 @@ def shutdown(self, immediate=False):
self._unfinished_tasks -= 1
if self._unfinished_tasks == 0:
self._finished.set()
+ # All getters need to re-check queue-empty to raise ShutDown
while self._getters:
getter = self._getters.popleft()
if not getter.done():

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-leave@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: list-python-checkins@lists.gossamer-threads.com