]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Update logging cookbook to show multiple worker processes using the concurrent.future...
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 22 Jul 2019 12:25:22 +0000 (05:25 -0700)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>
Mon, 22 Jul 2019 12:25:22 +0000 (13:25 +0100)
(cherry picked from commit d309352c6fd93a51f2b3011ca8c2125d3a5d394b)

Doc/howto/logging-cookbook.rst

index 105ae5ed25a0fa475d40f0299d7b8f06c18d2e26..a9222ab6ce38ecd3d8513a07e0df14f2f1bf9d21 100644 (file)
@@ -949,6 +949,41 @@ This variant shows how you can e.g. apply configuration for particular loggers
 machinery in the main process (even though the logging events are generated in
 the worker processes) to direct the messages to the appropriate destinations.
 
+Using concurrent.futures.ProcessPoolExecutor
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If you want to use :class:`concurrent.futures.ProcessPoolExecutor` to start
+your worker processes, you need to create the queue slightly differently.
+Instead of
+
+.. code-block:: python
+
+   queue = multiprocessing.Queue(-1)
+
+you should use
+
+.. code-block:: python
+
+   queue = multiprocessing.Manager().Queue(-1)  # also works with the examples above
+
+and you can then replace the worker creation from this::
+
+    workers = []
+    for i in range(10):
+        worker = multiprocessing.Process(target=worker_process,
+                                         args=(queue, worker_configurer))
+        workers.append(worker)
+        worker.start()
+    for w in workers:
+        w.join()
+
+to this (remembering to first import :mod:`concurrent.futures`)::
+
+    with concurrent.futures.ProcessPoolExecutor(max_workers=10) as executor:
+        for i in range(10):
+            executor.submit(worker_process, queue, worker_configurer)
+
+
 Using file rotation
 -------------------