-
-
Notifications
You must be signed in to change notification settings - Fork 32.5k
Closed
Labels
stdlibPython modules in the Lib dirPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
I think this is related to #119819
import logging.config
from queue import SimpleQueue
q = SimpleQueue()
config = {
'version': 1,
'handlers': {
'sink': {
'class': 'logging.handlers.QueueHandler',
'queue': q,
},
},
'root': {
'handlers': ['sink'],
},
}
logging.config.dictConfig(config)
ValueError: Unable to configure handler 'sink'
SimpleQueue does not implement the full Queue interfaces thus both isinstance(obj, queue.Queue)
and the queue interface check fails.
Since this has been working on 3.8 - <3.12 I think the queue interface check is checking for methods that are not used at all and should be adjusted accordingly.
Lines 500 to 525 in 2518918
def _is_queue_like_object(obj): | |
"""Check that *obj* implements the Queue API.""" | |
if isinstance(obj, queue.Queue): | |
return True | |
# defer importing multiprocessing as much as possible | |
from multiprocessing.queues import Queue as MPQueue | |
if isinstance(obj, MPQueue): | |
return True | |
# Depending on the multiprocessing start context, we cannot create | |
# a multiprocessing.managers.BaseManager instance 'mm' to get the | |
# runtime type of mm.Queue() or mm.JoinableQueue() (see gh-119819). | |
# | |
# Since we only need an object implementing the Queue API, we only | |
# do a protocol check, but we do not use typing.runtime_checkable() | |
# and typing.Protocol to reduce import time (see gh-121723). | |
# | |
# Ideally, we would have wanted to simply use strict type checking | |
# instead of a protocol-based type checking since the latter does | |
# not check the method signatures. | |
queue_interface = [ | |
'empty', 'full', 'get', 'get_nowait', | |
'put', 'put_nowait', 'join', 'qsize', | |
'task_done', | |
] | |
return all(callable(getattr(obj, method, None)) | |
for method in queue_interface) |
Tested with 3.12.6
CPython versions tested on:
3.12
Operating systems tested on:
Windows
Linked PRs
Metadata
Metadata
Assignees
Labels
stdlibPython modules in the Lib dirPython modules in the Lib dirtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Projects
Status
Done