Python Glossary English

все Python 3sysфункция

sys.setprofile()

отладка и трассировка

Устанавливает функцию профилирования: её вызывают на входе и выходе из функций, включая встроенные. До Python 3.12 на этом был построен cProfile.

Синтаксис

sys.setprofile(profilefunc)  # profilefunc(frame, event, arg)

В отличие от settrace, событий по строкам нет, зато видны вызовы функций на C: 'c_call', 'c_return', 'c_exception' — при них arg — сама встроенная функция. Возвращаемое значение игнорируется. Действует на текущий поток: новым потокам — threading.setprofile(), всем сразу — threading.setprofile_all_threads() (3.12). Не забудьте sys.setprofile(None): его собственный вызов тоже попадёт в журнал.

Примеры

import sys
events = []
def prof(frame, event, arg):
    if event in ('call', 'return'):
        events.append((event, frame.f_code.co_name))
    elif event == 'c_call':
        events.append((event, arg.__name__))
def f():
    return len('abc')
sys.setprofile(prof)
f()
sys.setprofile(None)
print(events)
# → [('call', 'f'), ('c_call', 'len'), ('return', 'f'), ('c_call', 'setprofile')]

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности