@@ -187,9 +187,6 @@ fully processed by daemon consumer threads.
187
187
processed (meaning that a :meth: `task_done ` call was received for every item
188
188
that had been :meth: `put ` into the queue).
189
189
190
- ``shutdown(immediate=True) `` calls :meth: `task_done ` for each remaining item
191
- in the queue.
192
-
193
190
Raises a :exc: `ValueError ` if called more times than there were items placed in
194
191
the queue.
195
192
@@ -204,6 +201,9 @@ fully processed by daemon consumer threads.
204
201
count of unfinished tasks drops to zero, :meth: `join ` unblocks.
205
202
206
203
204
+ Waiting for task completion
205
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
206
+
207
207
Example of how to wait for enqueued tasks to be completed::
208
208
209
209
import threading
@@ -233,22 +233,38 @@ Example of how to wait for enqueued tasks to be completed::
233
233
Terminating queues
234
234
^^^^^^^^^^^^^^^^^^
235
235
236
- :class: `Queue ` objects can be made to prevent further interaction by shutting
237
- them down .
236
+ When no longer needed, :class: `Queue ` objects can be wound down
237
+ until empty or terminated immediately with a hard shutdown .
238
238
239
239
.. method :: Queue.shutdown(immediate=False)
240
240
241
- Shut down the queue, making :meth: `~Queue.get ` and :meth: `~Queue.put ` raise
242
- :exc: `ShutDown `.
241
+ Put a :class: `Queue ` instance into a shutdown mode.
242
+
243
+ The queue can no longer grow.
244
+ Future calls to :meth: `~Queue.put ` raise :exc: `ShutDown `.
245
+ Currently blocked callers of :meth: `~Queue.put ` will be unblocked
246
+ and will raise :exc: `ShutDown ` in the formerly blocked thread.
247
+
248
+ If *immediate * is false (the default), the queue can be wound
249
+ down normally with :meth: `~Queue.get ` calls to extract tasks
250
+ that have already been loaded.
251
+
252
+ And if :meth: `~Queue.task_done ` is called for each remaining task, a
253
+ pending :meth: `~Queue.join ` will be unblocked normally.
254
+
255
+ Once the queue is empty, future calls to :meth: `~Queue.get ` will
256
+ raise :exc: `ShutDown `.
243
257
244
- By default, :meth: `~Queue.get ` on a shut down queue will only raise once the
245
- queue is empty. Set *immediate * to true to make :meth: `~Queue.get ` raise
246
- immediately instead.
258
+ If *immediate * is true, the queue is terminated immediately.
259
+ The queue is drained to be completely empty. All callers of
260
+ :meth: `~Queue.join ` are unblocked regardless of the number
261
+ of unfinished tasks. Blocked callers of :meth: `~Queue.get `
262
+ are unblocked and will raise :exc: `ShutDown ` because the
263
+ queue is empty.
247
264
248
- All blocked callers of :meth: `~Queue.put ` and :meth: `~Queue.get ` will be
249
- unblocked. If *immediate * is true, a task will be marked as done for each
250
- remaining item in the queue, which may unblock callers of
251
- :meth: `~Queue.join `.
265
+ Use caution when using :meth: `~Queue.join ` with *immediate * set
266
+ to true. This unblocks the join even when no work has been done
267
+ on the tasks, violating the usual invariant for joining a queue.
252
268
253
269
.. versionadded :: 3.13
254
270
0 commit comments