-
-
Notifications
You must be signed in to change notification settings - Fork 31.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Python 3.12 breaks backwards compatibility for logging configuration #111615
Comments
Thanks for the report. This is due to a fix for gh-93162 , which allows proper configuration of a |
I'm using @contextmanager
def configure_logging_in_child(queue):
config = {
'version': 1,
'handlers': {
'sink': {
'class': 'logging.handlers.QueueHandler',
'queue': queue,
},
},
'root': {
'handlers': ['sink'],
'level': 'DEBUG',
},
}
logging.config.dictConfig(config)
try:
yield
except Exception as e:
logging.exception(e)
def child_main(log_queue):
with configure_logging_in_child(log_queue):
# Do some actual work.
...
def main():
...
ctx = multiprocessing.get_context('spawn')
queue = ctx.Queue()
listener = logging.handlers.QueueListener(queue, logging.getLogger())
listener.start()
# There's actually a list of child processes.
args = (queue,)
child = ctx.Process(target=child_main, args=args)
child.start()
child.join()
... To be honest, I don't really understand how the queue & listener can be configured in one call, since I configure them separately in the parent & child processes. |
Well, they can be if you're using threads rather than processes. |
I understand. I cannot use Python threads though, since I need actual parallel execution (for a number of child processes). I use a similar pattern in a couple of other projects, where I also must use multiprocessing, since the child process needs to drop permissions, execute as a different user, etc. |
Well, the change in the linked PR should resolve this, but it will have to wait for the next release of Python 3.12. |
Thanks, sounds good! |
…nGH-111638) (cherry picked from commit 67655d8) Co-authored-by: Vinay Sajip <vinay_sajip@yahoo.co.uk>
Bug report
Bug description:
This worked fine on previous versions:
With Python 3.12, it drops an error:
More than that, even the example in the Logging Cookbook is broken now: https://docs.python.org/3/howto/logging-cookbook.html#a-more-elaborate-multiprocessing-example (fails with the same error).
Version info:
CPython versions tested on:
3.12
Operating systems tested on:
Linux
Linked PRs
The text was updated successfully, but these errors were encountered: