Документация Python неофициальный перевод
Содержание страницы

26.5. hotshot – высокопроизводительный профилировщик с журналированиемhotshot – High performance logging profiler

Новое в версии 2.2.

Этот модуль предоставляет более удобный интерфейс к C-модулю _hotshot. Hotshot является заменой существующего модуля profile. Поскольку он написан в основном на C, его влияние на производительность должно быть гораздо меньше, чем у существующего модуля profile.

Примечание

Модуль hotshot ориентирован на минимизацию накладных расходов при профилировании, ценой длительного времени постобработки данных. Для обычного использования рекомендуется применять cProfile. Модуль hotshot не поддерживается и может быть удалён из стандартной библиотеки в будущем.

Изменено в версии 2.5: Результаты теперь должны быть более осмысленными, чем раньше: ядро измерения времени содержало критическую ошибку.

Примечание

Профилировщик hotshot пока плохо работает с потоками. По возможности полезно использовать скрипт без потоков для запуска профилировщика на измеряемом коде.

class hotshot.Profile(logfile[, lineevents[, linetimings]])

Объект профилировщика. Аргумент logfile – имя файла журнала для хранения данных профилирования. Аргумент lineevents определяет, генерировать ли события для каждой строки исходного кода или только при вызове/возврате функции. По умолчанию равен 0 (только журналирование вызова/возврата функции). Аргумент linetimings указывает, нужно ли записывать информацию о времени. По умолчанию равен 1 (сохранять информацию о времени).

26.5.1. Объекты ProfileProfile Objects

Объекты Profile имеют следующие методы:

Profile.addinfo(key, value)

Добавляет произвольное помеченное значение в вывод профилировщика.

Profile.close()

Закрывает файл журнала и завершает работу профилировщика.

Profile.fileno()

Возвращает файловый дескриптор файла журнала профилировщика.

Profile.run(cmd)

Профилирует строку, совместимую с exec, в окружении скрипта. В качестве глобальных и локальных переменных скрипта используются глобальные переменные из модуля __main__.

Profile.runcall(func, *args, **keywords)

Профилирует один вызов вызываемого объекта. Можно передать дополнительные позиционные и именованные аргументы; возвращается результат вызова, а исключения могут распространяться без помех, при этом гарантируется, что профилирование отключено на время возврата.

Profile.runctx(cmd, globals, locals)

Вычисляет строку, совместимую с exec, в указанном окружении. Строка компилируется перед началом профилирования.

Profile.start()

Запускает профилировщик.

Profile.stop()

Останавливает профилировщик.

26.5.2. Использование данных hotshotUsing hotshot data

Новое в версии 2.2.

Этот модуль загружает данные профилирования hotshot в стандартные объекты pstats Stats.

hotshot.stats.load(filename)

Загружает данные hotshot из файла filename. Возвращает экземпляр класса pstats.Stats.

См. также

Модуль profile

Класс Stats модуля profile

26.5.3. Пример использованияExample Usage

Обратите внимание, что этот пример запускает «эталонный тест» pystones. Его выполнение может занять некоторое время и приведёт к созданию больших выходных файлов.

>>> import hotshot, hotshot.stats, test.pystone
>>> prof = hotshot.Profile("stones.prof")
>>> benchtime, stones = prof.runcall(test.pystone.pystones)
>>> prof.close()
>>> stats = hotshot.stats.load("stones.prof")
>>> stats.strip_dirs()
>>> stats.sort_stats('time', 'calls')
>>> stats.print_stats(20)
         850004 function calls in 10.090 CPU seconds

   Ordered by: internal time, call count

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    3.295    3.295   10.090   10.090 pystone.py:79(Proc0)
   150000    1.315    0.000    1.315    0.000 pystone.py:203(Proc7)
    50000    1.313    0.000    1.463    0.000 pystone.py:229(Func2)
 .
 .
 .