все Python 3threadingфункция
threading.settrace()
трассировка и профилирование
Задаёт функцию трассировки для потоков, запущенных после вызова: каждый новый поток передаёт её в sys.settrace() перед run().
Синтаксис
threading.settrace(func) # func(frame, event, arg) -> local tracer | None
Как и setprofile(), действует только на новые потоки: текущий и уже работающие трассировку не получают, для них — sys.settrace() или, с 3.12, settrace_all_threads(). Глобальная функция вызывается на событие call; чтобы получать построчные события line, она должна вернуть локальную функцию трассировки (часто саму себя), а вернув None, отключает трассировку этого кадра. На этом механизме работают pdb и coverage, и он сильно замедляет код.
Примеры
import threading
lines = []
def tracer(frame, event, arg):
if frame.f_code.co_name != 'work':
return None
if event == 'line':
lines.append(frame.f_lineno - frame.f_code.co_firstlineno)
return tracer
def work():
a = 1
b = 2
threading.settrace(tracer)
t = threading.Thread(target=work)
t.start()
t.join()
threading.settrace(None)
work() # главный поток не трассируется
print(lines) # → [1, 2]
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности