Содержание страницы
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. Объекты Profile¶Profile 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. Использование данных hotshot¶Using hotshot data
Новое в версии 2.2.
Этот модуль загружает данные профилирования hotshot в стандартные объекты pstats Stats.
-
hotshot.stats.load(filename)¶ Загружает данные hotshot из файла filename. Возвращает экземпляр класса
pstats.Stats.
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)
.
.
.