mirror of
https://github.com/python/cpython.git
synced 2025-10-03 05:35:59 +00:00
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>
This commit is contained in:
parent
e5237541a0
commit
d687900f98
41 changed files with 1851 additions and 960 deletions
|
@ -45,6 +45,7 @@ from test.support import warnings_helper
|
|||
import random
|
||||
import inspect
|
||||
import threading
|
||||
import contextvars
|
||||
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
|
@ -1726,8 +1727,13 @@ class ThreadingTest:
|
|||
self.finish1 = threading.Event()
|
||||
self.finish2 = threading.Event()
|
||||
|
||||
th1 = threading.Thread(target=thfunc1, args=(self,))
|
||||
th2 = threading.Thread(target=thfunc2, args=(self,))
|
||||
# This test wants to start threads with an empty context, no matter
|
||||
# the setting of sys.flags.thread_inherit_context. We pass the
|
||||
# 'context' argument explicitly with an empty context instance.
|
||||
th1 = threading.Thread(target=thfunc1, args=(self,),
|
||||
context=contextvars.Context())
|
||||
th2 = threading.Thread(target=thfunc2, args=(self,),
|
||||
context=contextvars.Context())
|
||||
|
||||
th1.start()
|
||||
th2.start()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue