https://github.com/python/cpython/commit/8d199774cb6b68b295b78cb8be9a3afc805ac880
commit: 8d199774cb6b68b295b78cb8be9a3afc805ac880
branch: 3.12
author: Miss Islington (bot) <[email protected]>
committer: vsajip <[email protected]>
date: 2024-06-05T07:59:15+01:00
summary:

[3.12] gh-119819: Update logging configuration to support joinable multiproc… 
(GH-120090) (GH-120092)

(cherry picked from commit 983efcf15b2503fe0c05d5e03762385967962b33)

files:
M Lib/logging/config.py
M Lib/test/test_logging.py

diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index c98eb6c8215d1a..1824d0aa747225 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -790,8 +790,10 @@ def configure_handler(self, config):
                     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):
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 38caa56dbc5f3e..6dd1b6f8047020 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -3896,12 +3896,16 @@ def test_config_queue_handler(self):
 
     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

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]

Reply via email to