From: Victor Stinner Date: Wed, 18 Mar 2015 13:05:43 +0000 (+0100) Subject: Issue #12155: Fix queue doc example to join threads X-Git-Tag: v3.5.0a3~148 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=de311345584af1dc0fa1514d5f94bea0ea867e09;p=thirdparty%2FPython%2Fcpython.git Issue #12155: Fix queue doc example to join threads Use None as a sentinel to stop a worker. --- diff --git a/Doc/library/queue.rst b/Doc/library/queue.rst index 680d6900529d..1cb09353770d 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() - - q = Queue() - for i in range(num_worker_threads): - t = Thread(target=worker) - t.daemon = True + def worker(): + while True: + item = q.get() + if item is None: + break + do_work(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) - 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::