Python Glossary English

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