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 файл всё время работы обновлялся. Приведённый код декоратора годится для этой задачи?


Ответы (0 шт):