]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-119819: Update logging configuration to support joinable multiproc… (GH-120090)
authorVinay Sajip <vinay_sajip@yahoo.co.uk>
Wed, 5 Jun 2024 06:25:47 +0000 (07:25 +0100)
committerGitHub <noreply@github.com>
Wed, 5 Jun 2024 06:25:47 +0000 (07:25 +0100)
gh-119819: Update logging configuration to support joinable multiprocessing manager queues.

Lib/logging/config.py
Lib/test/test_logging.py

index 0b10bf82b60a364bf7c6ede504a564d4bd0deb5f..9de84e527b18acdedf732e065f7ae566cb8df41b 100644 (file)
@@ -783,8 +783,10 @@ class DictConfigurator(BaseConfigurator):
                     from multiprocessing.queues import Queue as MPQueue
                     from multiprocessing import Manager as MM
                     proxy_queue = MM().Queue()
+                    proxy_joinable_queue = MM().JoinableQueue()
                     qspec = config['queue']
-                    if not isinstance(qspec, (queue.Queue, MPQueue, type(proxy_queue))):
+                    if not isinstance(qspec, (queue.Queue, MPQueue,
+                                      type(proxy_queue), type(proxy_joinable_queue))):
                         if isinstance(qspec, str):
                             q = self.resolve(qspec)
                             if not callable(q):
index 0c9a24e58dfd8cfb19f3db33c0e57a79625878e1..ef2d4a621be9626cba98ed3e1ac6e17fcacde79b 100644 (file)
@@ -3928,12 +3928,16 @@ class ConfigDictTest(BaseTest):
 
     def test_multiprocessing_queues(self):
         # See gh-119819
-        import_helper.import_module('_multiprocessing')  # will skip test if it's not available
+
+        # will skip test if it's not available
+        import_helper.import_module('_multiprocessing')
+
         cd = copy.deepcopy(self.config_queue_handler)
         from multiprocessing import Queue as MQ, Manager as MM
         q1 = MQ()  # this can't be pickled
         q2 = MM().Queue()  # a proxy queue for use when pickling is needed
-        for qspec in (q1, q2):
+        q3 = MM().JoinableQueue()  # a joinable proxy queue
+        for qspec in (q1, q2, q3):
             fn = make_temp_file('.log', 'test_logging-cmpqh-')
             cd['handlers']['h1']['filename'] = fn
             cd['handlers']['ah']['queue'] = qspec