> **Источник:** https://python-all.ru/2.7/library/hotshot.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 26.5. [`hotshot`](https://python-all.ru/2.7/library/hotshot.html#module-hotshot) – высокопроизводительный профилировщик с журналированием

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

Этот модуль предоставляет более удобный интерфейс к 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).

> **Примечание**
>
> Модуль [`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) не поддерживается и может быть удалён из стандартной библиотеки в будущем.

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

> **Примечание**
>
> Профилировщик [`hotshot`](https://python-all.ru/2.7/library/hotshot.html#module-hotshot) пока плохо работает с потоками. По возможности полезно использовать скрипт без потоков для запуска профилировщика на измеряемом коде.

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

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

## 26.5.1. Объекты Profile

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

#### `Profile.addinfo(key, value)`

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

#### `Profile.close()`

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

#### `Profile.fileno()`

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

#### `Profile.run(cmd)`

Профилирует строку, совместимую с [`exec`](https://python-all.ru/2.7/reference/simple_stmts.html#exec), в окружении скрипта. В качестве глобальных и локальных переменных скрипта используются глобальные переменные из модуля [`__main__`](https://python-all.ru/2.7/library/__main__.html#module-__main__).

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

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

#### `Profile.runctx(cmd, globals, locals)`

Вычисляет строку, совместимую с [`exec`](https://python-all.ru/2.7/reference/simple_stmts.html#exec), в указанном окружении. Строка компилируется перед началом профилирования.

#### `Profile.start()`

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

#### `Profile.stop()`

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

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

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

Этот модуль загружает данные профилирования hotshot в стандартные объекты [`pstats`](https://python-all.ru/2.7/library/profile.html#module-pstats) Stats.

#### `hotshot.stats.load(filename)`

Загружает данные hotshot из файла *filename*. Возвращает экземпляр класса [`pstats.Stats`](https://python-all.ru/2.7/library/profile.html#pstats.Stats).

> **См. также**
>
> **Модуль [`profile`](https://python-all.ru/2.7/library/profile.html#module-profile)**
>
> Класс `Stats` модуля [`profile`](https://python-all.ru/2.7/library/profile.html#module-profile)

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

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

```python
>>> 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)
 .
 .
 .
```
