Как вы можете профилировать скрипт Python? - PullRequest
1123 голосов
/ 24 февраля 2009

Project Euler и другие конкурсы по кодированию часто имеют максимальное время для запуска или люди хвастаются тем, насколько быстро работает их конкретное решение. В случае с Python подходы иногда оказываются несколько хитрыми, то есть добавление временного кода к __main__.

Как правильно определить, сколько времени занимает запуск программы на Python?

Ответы [ 23 ]

2 голосов
/ 19 апреля 2017

Это будет зависеть от того, что вы хотите увидеть из профилирования. Простое время Метрики могут быть даны (Bash).

time python python_prog.py

Даже '/ usr / bin / time' может выводить подробные метрики, используя флаг --verbose.

Чтобы проверить метрики времени, предоставляемые каждой функцией, и лучше понять, сколько времени тратится на функции, вы можете использовать встроенный cProfile в python.

Если говорить о более детальных показателях, таких как производительность, время - не единственная метрика. Вы можете беспокоиться о памяти, потоках и т. Д.
Варианты профилирования:
1. line_profiler - другой профилировщик, используемый для построчного поиска метрик синхронизации.
2. memory_profiler - инструмент для профилирования использования памяти.
3. heapy (из проекта Guppy) Профиль использования объектов в куче.

Это некоторые из тех, которые я обычно использую. Но если вы хотите узнать больше, попробуйте прочитать эту книгу Это очень хорошая книга о том, как начать с производительности. Вы можете перейти к более сложным темам об использовании Python, скомпилированных на языке Cython и JIT (Just-in-time).

1 голос
/ 12 февраля 2016

Существует также статистический профилировщик, который называется statprof. Это профилировщик выборки, поэтому он добавляет минимальные накладные расходы к вашему коду и дает синхронизацию по строкам (а не только по функциям). Он больше подходит для мягких приложений реального времени, таких как игры, но может иметь меньшую точность, чем cProfile.

Версия в pypi немного устарела, поэтому ее можно установить с pip, указав хранилище git :

pip install git+git://github.com/bos/statprof.py@1a33eba91899afe17a8b752c6dfdec6f05dd0c01

Вы можете запустить его так:

import statprof

with statprof.profile():
    my_questionable_function()

См. Также https://stackoverflow.com/a/10333592/320036

0 голосов
/ 02 февраля 2017

Когда я не root на сервере, я использую lsprofcalltree.py и запустите мою программу так:

python lsprofcalltree.py -o callgrind.1 test.py

Затем я могу открыть отчет с помощью любого совместимого с callgrind программного обеспечения, например qcachegrind

...