python cProfile для метода
Есть большое приложение и в нём класс, который притормаживает и требует профилирования.
Пишу внешнюю функцию
import cProfile
def profile(func):
def wrapper(*args, **kwargs):
profile_filename = func.__name__ + '.txt'
profiler = cProfile.Profile()
result = profiler.runcall(func, *args, **kwargs)
profiler.dump_stats(profile_filename)
return result
return wrapper
Если повесить @profile
на весь класс, то декоратор отработает один раз, поэтому вешаю на все методы, которые надо проверить
Вопрос 1.
Предположим, что все эти методы имеют только ссылку (self)
при отсутствии других аргументов.
При попытке завести вылезает ошибка:
result = profiler.runcall(func, *args, **kwargs)
File "/usr/local/lib/python3.10/cProfile.py", line 110, in runcall
return func(*args, **kw)
TypeError: my_method() takes 1 positional argument but 2 were given
Прятал аргументы типа такого result = profiler.runcall(func, *args, **kwargs)
но не получается.
Вопрос 2.
Приложение закрывается по пользовательскому нажатию. Мне надо, чтобы output
файл всё время работы обновлялся. Приведённый код декоратора годится для этой задачи?