]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40387: Improve queue join() example. (GH-19724)
authorRaymond Hettinger <rhettinger@users.noreply.github.com>
Mon, 27 Apr 2020 01:11:27 +0000 (18:11 -0700)
committerGitHub <noreply@github.com>
Mon, 27 Apr 2020 01:11:27 +0000 (18:11 -0700)
Doc/library/queue.rst

index 2eeab5e26266470646f7ab4b9cd02aa7134f3de1..0ec5900bef5bbff6da218e066b9d4f1ac8998876 100644 (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