Подтвердить что ты не робот

Каков надежный метод поиска наиболее трудоемкой части кода?

В моем исходном коде я пытаюсь захватить и измерить время выпуска сегмента в Python. Как я могу правильно измерить время прохождения этого сегмента с хорошей точностью?

4b9b3361

Ответ 1

Используйте профайлер.

Python cProfile включен в стандартную библиотеку.

Для более удобного способа используйте пакет profilestats. Затем вы можете использовать декоратор, чтобы просто украсить функции, которые хотите профилировать:

from profilestats import profile

@profile
def my_function(args, etc):
    pass

Это приведет к тому, что в STDOUT будет напечатано такое краткое изложение:

         6 function calls in 0.026 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.026    0.026 some_code.py:3(some_func)
        2    0.019    0.010    0.026    0.013 some_code.py:9(expensive_func)
        2    0.007    0.003    0.007    0.003 {range}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

Однако гораздо более полезная информация содержится в файле cachegrind.out.profilestats. Вы можете открыть этот файл с помощью инструментов, которые могут визуализировать статистику cachegrind, например RunSnakeRun и получать приятные, легкие (или более простые) для чтения визуализации вашего стека вызовов следующим образом:

RunSnakeRun

Обновить. Оба запроса на загрузку для profilestats и pyprof2calltree были объединены, поэтому теперь они поддерживают Python 3.x.