From d687900f98114bb5910daad9553ae381d7daf94b Mon Sep 17 00:00:00 2001 From: Neil Schemenauer Date: Wed, 9 Apr 2025 16:18:54 -0700 Subject: gh-128384: Use a context variable for warnings.catch_warnings (gh-130010) Make `warnings.catch_warnings()` use a context variable for holding the warning filtering state if the `sys.flags.context_aware_warnings` flag is set to true. This makes using the context manager thread-safe in multi-threaded programs. Add the `sys.flags.thread_inherit_context` flag. If true, starting a new thread with `threading.Thread` will use a copy of the context from the caller of `Thread.start()`. Both these flags are set to true by default for the free-threaded build and false for the default build. Move the Python implementation of warnings.py into _py_warnings.py. Make _contextvars a builtin module. Co-authored-by: Kumar Aditya --- Python/sysmodule.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Python/sysmodule.c') diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 2a28fab2f51..3e0165acd6f 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -3335,6 +3335,8 @@ static PyStructSequence_Field flags_fields[] = { {"safe_path", "-P"}, {"int_max_str_digits", "-X int_max_str_digits"}, {"gil", "-X gil"}, + {"thread_inherit_context", "-X thread_inherit_context"}, + {"context_aware_warnings", "-X context_aware_warnings"}, {0} }; @@ -3435,6 +3437,8 @@ set_flags_from_config(PyInterpreterState *interp, PyObject *flags) #else SetFlagObj(PyLong_FromLong(1)); #endif + SetFlag(config->thread_inherit_context); + SetFlag(config->context_aware_warnings); #undef SetFlagObj #undef SetFlag return 0; -- cgit v1.2.3