Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 34k
Closed
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Related bug: #111615
Related pull: #111638
Related codes:
Lines 789 to 804 in bd0d97c
| if'queue'inconfig: | |
| frommultiprocessing.queuesimportQueueasMPQueue | |
| qspec=config['queue'] | |
| ifnotisinstance(qspec, (queue.Queue, MPQueue)): | |
| ifisinstance(qspec, str): | |
| q=self.resolve(qspec) | |
| ifnotcallable(q): | |
| raiseTypeError('Invalid queue specifier %r'%qspec) | |
| q=q() | |
| elifisinstance(qspec, dict): | |
| if'()'notinqspec: | |
| raiseTypeError('Invalid queue specifier %r'%qspec) | |
| q=self.configure_custom(dict(qspec)) | |
| else: | |
| raiseTypeError('Invalid queue specifier %r'%qspec) | |
| config['queue'] =q |
reproducible example using Python 3.12.3
importlogging.configdefmain(q): config={'version': 1, 'handlers':{'sink':{'class': 'logging.handlers.QueueHandler', 'queue': q, }, }, 'root':{'handlers': ['sink'], }, } logging.config.dictConfig(config) if__name__=='__main__': importmultiprocessingasmpmain(mp.Manager().Queue()) #import asyncio#main(asyncio.Queue()) # broken tooerror:
Traceback (most recent call last): File "/usr/lib/python3.12/logging/config.py", line 581, in configure handler = self.configure_handler(handlers[name]) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/logging/config.py", line 801, in configure_handler raise TypeError('Invalid queue specifier %r' % qspec) TypeError: Invalid queue specifier <AutoProxy[Queue] object, typeid 'Queue' at 0x7f8b07189d90> The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/xxx/logging-queue-handler-bug.py", line 33, in <module> main(mp.Manager().Queue()) File "/home/xxx/logging-queue-handler-bug.py", line 29, in main logging.config.dictConfig(config) File "/usr/lib/python3.12/logging/config.py", line 914, in dictConfig dictConfigClass(config).configure() File "/usr/lib/python3.12/logging/config.py", line 588, in configure raise ValueError('Unable to configure handler ' ValueError: Unable to configure handler 'sink' Queue classes to check for logging QueueHandler
- queue.Queue(),
<queue.Queue at 0x7fb86eeef170>, works. - multiprocessing
- multiprocessing.Queue(),
<multiprocessing.queues.Queue at 0x7fb871790500>, works. - multiprocessing.Manager().Queue()
<AutoProxy[Queue] object, typeid 'Queue' at 0x7fb86ef4a840>, broken.
Its class ismultiprocessing.managers.AutoProxy[Queue], a subclass ofmultiprocessing.managers.BaseProxy.
- multiprocessing.Queue(),
- asyncio.queues.Queue()
<Queue at 0x7fb86f0be4e0 maxsize=0>, broken. - any other Queue?
discuss: how to fix
Check all Queue classes mentioned above in
Line 792 in bd0d97c
| ifnotisinstance(qspec, (queue.Queue, MPQueue)): |
or just focus on handling special cases: str and dict, while leaving other cases un-checked (e.g., queue.Queue, multiprocessing.queues.Queue).
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs
- gh-119819: Fix regression to allow logging configuration with multipr… #120030
- [3.12] gh-119819: Fix regression to allow logging configuration with multipr… (GH-120030) #120034
- [3.13] gh-119819: Fix regression to allow logging configuration with multipr… (GH-120030) #120035
- gh-119819: Update test to skip if _multiprocessing is unavailable. #120067
- [3.12] gh-119819: Update test to skip if _multiprocessing is unavailable. (GH-120067) #120071
- [3.13] gh-119819: Update test to skip if _multiprocessing is unavailable. (GH-120067) #120072
- gh-119819: Update logging configuration to support joinable multiproc… #120090
- [3.12] gh-119819: Update logging configuration to support joinable multiproc… (GH-120090) #120092
- [3.13] gh-119819: Update logging configuration to support joinable multiproc… (GH-120090) #120093
- gh-119819: Conditional skip of logging tests that require multiprocessing subprocess support #120476
- [3.13] gh-119819: Conditional skip of logging tests that require multiprocessing subprocess support (GH-120476) #120531
- [3.12] gh-119819: Conditional skip of logging tests that require multiprocessing subprocess support (GH-120476) #120532
Metadata
Metadata
Assignees
Labels
stdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
Status
Done