Issue #12155: Fix queue doc example to join threads

Use None as a sentinel to stop a worker.
This commit is contained in:
Victor Stinner 2015-03-18 14:05:43 +01:00
parent 926ce70066
commit de31134558
1 changed files with 22 additions and 12 deletions

View File

@ -158,22 +158,32 @@ fully processed by daemon consumer threads.
Example of how to wait for enqueued tasks to be completed::
def worker():
while True:
item = q.get()
do_work(item)
q.task_done()
def worker():
while True:
item = q.get()
if item is None:
break
do_work(item)
q.task_done()
q = Queue()
for i in range(num_worker_threads):
t = Thread(target=worker)
t.daemon = True
q = queue.Queue()
threads = []
for i in range(num_worker_threads):
t = threading.Thread(target=worker)
t.start()
threads.append(t)
for item in source():
q.put(item)
for item in source():
q.put(item)
q.join() # block until all tasks are done
# block until all tasks are done
q.join()
# stop workers
for i in range(num_worker_threads):
q.put(None)
for t in threads:
t.join()
.. seealso::