hotshot.md
1> **Источник:** https://python-all.ru/2.7/library/hotshot.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# 26.5. [`hotshot`](https://python-all.ru/2.7/library/hotshot.html#module-hotshot) – высокопроизводительный профилировщик с журналированием89Новое в версии 2.2.1011Этот модуль предоставляет более удобный интерфейс к C-модулю `_hotshot`. Hotshot является заменой существующего модуля [`profile`](https://python-all.ru/2.7/library/profile.html#module-profile). Поскольку он написан в основном на C, его влияние на производительность должно быть гораздо меньше, чем у существующего модуля [`profile`](https://python-all.ru/2.7/library/profile.html#module-profile).1213> **Примечание**14>15> Модуль [`hotshot`](https://python-all.ru/2.7/library/hotshot.html#module-hotshot) ориентирован на минимизацию накладных расходов при профилировании, ценой длительного времени постобработки данных. Для обычного использования рекомендуется применять [`cProfile`](https://python-all.ru/2.7/library/profile.html#module-cProfile). Модуль [`hotshot`](https://python-all.ru/2.7/library/hotshot.html#module-hotshot) не поддерживается и может быть удалён из стандартной библиотеки в будущем.1617Изменено в версии 2.5: Результаты теперь должны быть более осмысленными, чем раньше: ядро измерения времени содержало критическую ошибку.1819> **Примечание**20>21> Профилировщик [`hotshot`](https://python-all.ru/2.7/library/hotshot.html#module-hotshot) пока плохо работает с потоками. По возможности полезно использовать скрипт без потоков для запуска профилировщика на измеряемом коде.2223#### `class hotshot.Profile(logfile[, lineevents[, linetimings]])`2425Объект профилировщика. Аргумент *logfile* – имя файла журнала для хранения данных профилирования. Аргумент *lineevents* определяет, генерировать ли события для каждой строки исходного кода или только при вызове/возврате функции. По умолчанию равен `0` (только журналирование вызова/возврата функции). Аргумент *linetimings* указывает, нужно ли записывать информацию о времени. По умолчанию равен `1` (сохранять информацию о времени).2627## 26.5.1. Объекты Profile2829Объекты Profile имеют следующие методы:3031#### `Profile.addinfo(key, value)`3233Добавляет произвольное помеченное значение в вывод профилировщика.3435#### `Profile.close()`3637Закрывает файл журнала и завершает работу профилировщика.3839#### `Profile.fileno()`4041Возвращает файловый дескриптор файла журнала профилировщика.4243#### `Profile.run(cmd)`4445Профилирует строку, совместимую с [`exec`](https://python-all.ru/2.7/reference/simple_stmts.html#exec), в окружении скрипта. В качестве глобальных и локальных переменных скрипта используются глобальные переменные из модуля [`__main__`](https://python-all.ru/2.7/library/__main__.html#module-__main__).4647#### `Profile.runcall(func, *args, **keywords)`4849Профилирует один вызов вызываемого объекта. Можно передать дополнительные позиционные и именованные аргументы; возвращается результат вызова, а исключения могут распространяться без помех, при этом гарантируется, что профилирование отключено на время возврата.5051#### `Profile.runctx(cmd, globals, locals)`5253Вычисляет строку, совместимую с [`exec`](https://python-all.ru/2.7/reference/simple_stmts.html#exec), в указанном окружении. Строка компилируется перед началом профилирования.5455#### `Profile.start()`5657Запускает профилировщик.5859#### `Profile.stop()`6061Останавливает профилировщик.6263## 26.5.2. Использование данных hotshot6465Новое в версии 2.2.6667Этот модуль загружает данные профилирования hotshot в стандартные объекты [`pstats`](https://python-all.ru/2.7/library/profile.html#module-pstats) Stats.6869#### `hotshot.stats.load(filename)`7071Загружает данные hotshot из файла *filename*. Возвращает экземпляр класса [`pstats.Stats`](https://python-all.ru/2.7/library/profile.html#pstats.Stats).7273> **См. также**74>75> **Модуль [`profile`](https://python-all.ru/2.7/library/profile.html#module-profile)**76>77> Класс `Stats` модуля [`profile`](https://python-all.ru/2.7/library/profile.html#module-profile)7879## 26.5.3. Пример использования8081Обратите внимание, что этот пример запускает «эталонный тест» pystones. Его выполнение может занять некоторое время и приведёт к созданию больших выходных файлов.8283```python84>>> import hotshot, hotshot.stats, test.pystone85>>> prof = hotshot.Profile("stones.prof")86>>> benchtime, stones = prof.runcall(test.pystone.pystones)87>>> prof.close()88>>> stats = hotshot.stats.load("stones.prof")89>>> stats.strip_dirs()90>>> stats.sort_stats('time', 'calls')91>>> stats.print_stats(20)92 850004 function calls in 10.090 CPU seconds9394 Ordered by: internal time, call count9596 ncalls tottime percall cumtime percall filename:lineno(function)97 1 3.295 3.295 10.090 10.090 pystone.py:79(Proc0)98 150000 1.315 0.000 1.315 0.000 pystone.py:203(Proc7)99 50000 1.313 0.000 1.463 0.000 pystone.py:229(Func2)100 .101 .102 .103```104