aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Python/sysmodule.c
diff options
context:
space:
mode:
authorNeil Schemenauer <nas-github@arctrix.com>2025-04-09 16:18:54 -0700
committerGitHub <noreply@github.com>2025-04-09 16:18:54 -0700
commitd687900f98114bb5910daad9553ae381d7daf94b (patch)
tree6f7c31164aa867d1bbf8c82f5eeb4cb9129dd3b0 /Python/sysmodule.c
parente5237541a098e32a70fc621dee08721a72be7eb8 (diff)
downloadcpython-d687900f98114bb5910daad9553ae381d7daf94b.tar.gz
cpython-d687900f98114bb5910daad9553ae381d7daf94b.zip
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 <kumaraditya@python.org>
Diffstat (limited to 'Python/sysmodule.c')
-rw-r--r--Python/sysmodule.c4
1 files changed, 4 insertions, 0 deletions
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;