bpo-40387: Improve queue join() example. (GH-19724)

This commit is contained in:
Raymond Hettinger 2020-04-26 18:11:27 -07:00 committed by GitHub
parent 68b352a698
commit 88499f15f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 16 deletions

View File

@ -190,32 +190,28 @@ fully processed by daemon consumer threads.
Example of how to wait for enqueued tasks to be completed::
import threading, queue
q = queue.Queue()
def worker():
while True:
item = q.get()
if item is None:
break
do_work(item)
print(f'Working on {item}')
print(f'Finished {item}')
q.task_done()
q = queue.Queue()
threads = []
for i in range(num_worker_threads):
t = threading.Thread(target=worker)
t.start()
threads.append(t)
# turn-on the worker thread
threading.Thread(target=worker, daemon=True).start()
for item in source():
# send thirty task requests to the worker
for item in range(30):
q.put(item)
print('All task requests sent\n', end='')
# 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()
print('All work completed')
SimpleQueue Objects