Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Python 3.12+ breaks backwards compatibility for logging QueueHandler with queue.SimpleQueue #124653

Closed
Assignees
picnixz
Labels
stdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error
@spacemanspiff2007

Description

@spacemanspiff2007

Bug report

Bug description:

I think this is related to#119819

importlogging.configfromqueueimportSimpleQueueq=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 bothisinstance(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.

def_is_queue_like_object(obj):
"""Check that *obj* implements the Queue API."""
ifisinstance(obj,queue.Queue):
returnTrue
# defer importing multiprocessing as much as possible
frommultiprocessing.queuesimportQueueasMPQueue
ifisinstance(obj,MPQueue):
returnTrue
# 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',
]
returnall(callable(getattr(obj,method,None))
formethodinqueue_interface)

Tested with 3.12.6

CPython versions tested on:

3.12

Operating systems tested on:

Windows

Linked PRs

Metadata

Metadata

Assignees

Labels

stdlibStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or error

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions


    [8]ページ先頭

    ©2009-2025 Movatter.jp