From de311345584af1dc0fa1514d5f94bea0ea867e09 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Wed, 18 Mar 2015 14:05:43 +0100 Subject: [PATCH] Issue #12155: Fix queue doc example to join threads Use None as a sentinel to stop a worker. --- Doc/library/queue.rst | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/Doc/library/queue.rst b/Doc/library/queue.rst index 680d6900529..1cb09353770 100644 --- a/Doc/library/queue.rst +++ b/Doc/library/queue.rst @@ -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::