]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #12155: Fix queue doc example to join threads
authorVictor Stinner <victor.stinner@gmail.com>
Wed, 18 Mar 2015 13:05:43 +0000 (14:05 +0100)
committerVictor Stinner <victor.stinner@gmail.com>
Wed, 18 Mar 2015 13:05:43 +0000 (14:05 +0100)
Use None as a sentinel to stop a worker.

Doc/library/queue.rst

index 680d6900529d394b78ae2027739a93057c3ad443..1cb09353770d9de0576744d28d73c4bdb438215b 100644 (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()
-
-   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::