mirror of
https://github.com/python/cpython.git
synced 2025-07-09 20:35:26 +00:00
gh-117531: Unblock getters after non-immediate queue shutdown (#117532)
(This is a small tweak of the original gh-104750 which added shutdown.)
This commit is contained in:
parent
dfcae4379f
commit
6bc0b33a91
3 changed files with 26 additions and 5 deletions
|
@ -239,8 +239,9 @@ class Queue:
|
|||
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().
|
||||
'''
|
||||
with self.mutex:
|
||||
self.is_shutdown = True
|
||||
|
@ -249,9 +250,10 @@ class Queue:
|
|||
self._get()
|
||||
if self.unfinished_tasks > 0:
|
||||
self.unfinished_tasks -= 1
|
||||
self.not_empty.notify_all()
|
||||
# release all blocked threads in `join()`
|
||||
self.all_tasks_done.notify_all()
|
||||
# All getters need to re-check queue-empty to raise ShutDown
|
||||
self.not_empty.notify_all()
|
||||
self.not_full.notify_all()
|
||||
|
||||
# Override these methods to implement other queue organizations
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue