все Python 3threadingфункция
threading.setprofile()
трассировка и профилирование
Задаёт функцию профилирования для потоков, запущенных после вызова: каждый новый поток передаёт её в sys.setprofile() перед run().
Синтаксис
threading.setprofile(func) # func(frame, event, arg)
Ловушка — в слове «новых»: уже работающие потоки и сам вызывающий, обычно главный, функцию не получают. Для текущего потока нужен ещё sys.setprofile(), а для всех сразу с 3.12 есть setprofile_all_threads(). Функция получает события call/return и c_call/c_return, но не построчные — это settrace(). Руками её пишут редко: cProfile и сторонние профилировщики делают это сами, а любое профилирование заметно замедляет программу.
Примеры
import threading
calls = []
def prof(frame, event, arg):
if event == 'call':
calls.append(frame.f_code.co_name)
def work():
pass
threading.setprofile(prof)
work() # главный поток не профилируется
t = threading.Thread(target=work)
t.start()
t.join()
threading.setprofile(None)
print(calls.count('work')) # → 1
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности