У меня есть набор скриптов Python, которые я хотел бы профилировать с помощью kernprof https://github.com/rkern/line_profiler, но я также хочу иметь возможность запускать его во время обычного выполнения без kernprof.
Как можно элегантно игнорировать неопределенный @profile во время выполнения без kernprof? Или любой другой декоратор.
Пример кода:
@profile
def hello():
print('Testing')
hello()
Работает с:
kernprof -l test.py
Правильно выполняет профилировщик на методах @profile
Работает с:
python test.py
Возвращает ошибку:
Traceback (most recent call last):
File "test.py", line 1, in <module>
@profile
NameError: name 'profile' is not defined
Хотелось бы избежать появления этой ошибки повсюду, поскольку я хочу, чтобы код выполнялся так, как будто @profile не работает, когда он не вызывается с помощью kernprof.
Спасибо! -Лора
Изменить: в итоге я использовал cProfile с kcachegrind и вообще избегал декораторов.
Использование результатов cProfile с KCacheGrind
python -m cProfile -o profile_data.pyprof run_cli.py
pyprof2calltree -i profile_data.pyprof && qcachegrind profile_data.pyprof.log