aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2024-06-05 08:59:41 +0200
committerGitHub <noreply@github.com>2024-06-05 07:59:41 +0100
commit71f86eedeb29d1933edbc9b27f40ce5cbba2f4a9 (patch)
treec9cb9c5cf1f8c6ca1e4911d08603204902d97676
parent[3.13] gh-120078: Fix struct_time attr typo tm_day -> tm_mday in Doc/library/... (diff)
downloadcpython-71f86eedeb29d1933edbc9b27f40ce5cbba2f4a9.tar.gz
cpython-71f86eedeb29d1933edbc9b27f40ce5cbba2f4a9.tar.bz2
cpython-71f86eedeb29d1933edbc9b27f40ce5cbba2f4a9.zip
[3.13] gh-119819: Update logging configuration to support joinable multiproc… (GH-120090) (GH-120093)
(cherry picked from commit 983efcf15b2503fe0c05d5e03762385967962b33)
-rw-r--r--Lib/logging/config.py4
-rw-r--r--Lib/test/test_logging.py8
2 files changed, 9 insertions, 3 deletions
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index 0b10bf82b60..9de84e527b1 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -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):
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 0c9a24e58df..ef2d4a621be 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -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