Python 3.12+threadingфункция
threading.settrace_all_threads()
трассировка и профилирование
Ставит функцию трассировки во все потоки сразу — и уже работающие, включая текущий, и те, что запустят позже (с Python 3.12).
Синтаксис
threading.settrace_all_threads(func)
Отличие от settrace(): тот действует только на будущие потоки, а эта функция ещё и вызывает sys.settrace во всех работающих потоках. Так отладчик, подключённый посреди работы программы, видит и потоки, запущенные до него. Снять трассировку отовсюду — settrace_all_threads(None). В уже выполняющихся кадрах построчные события не появятся: локальный трассировщик ставится на событие call, то есть со следующего вызова функции.
Примеры
import sys
import threading
calls = []
def tracer(frame, event, arg):
if event == 'call' and frame.f_code.co_name == 'step':
calls.append(threading.current_thread().name)
return None
def step():
pass
started, go = threading.Event(), threading.Event()
def worker():
started.set()
go.wait()
step()
t = threading.Thread(target=worker, name='old')
t.start()
started.wait()
threading.settrace_all_threads(tracer) # поток 'old' уже работает
step()
go.set()
t.join()
threading.settrace_all_threads(None)
print(sorted(calls), sys.gettrace()) # → ['MainThread', 'old'] None
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности