Python Glossary English

все 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Сообщить о неточности