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