Профилирование программы python с помощью PyCharm (или любой другой IDE)
Я запускаю относительно сложную программу python, и в ней есть моделирование montecarlo, которое занимает большую часть времени. Я хотел бы узнать, какая часть использует больше ресурсов, чтобы я мог потенциально сделать это быстрее.
Я использую PyCharm Professional edition и пытался использовать профилировщик, но в результате получается только большой список нерелевантных функций, о которых я никогда не слышал.
вопросы: есть ли хороший профилировщик, который я могу использовать, что обеспечивает значимый результаты, чтобы я мог видеть, какая функция или ключевое слово использует большинство ресурсов в моем моделировании montecarlo?
2 ответов
в зависимости от ваших потребностей и вашей версии python, возможно, вы хотите использовать что-то вроде hotshot. https://docs.python.org/2/library/hotshot.html
EDIT:
для python 3.4 cProfile, вероятно, один из лучших вариантов, которые у вас есть, но вам обязательно придется фильтровать результаты с помощью grep/sed/awk, чтобы получить соответствующие результаты, особенно если вы используете библиотеки, импортированные, где происходит много внутренних вызовов.
мне нравится Сортировать по количеству вызовов:
python -m cProfile -s 'calls' <your_program>.py
теперь проблема в python3 с этим методом - это количество примитивных вызовов, которые будут отображаться, если cProfile вызывается извне, поэтому запуск его внутри, вероятно, лучшая идея:
import cProfile
pr = cProfile.Profile()
pr.enable()
your_function_call()
pr.disable()
# after your program ends
pr.print_stats(sort="calls")
Примечание: как уже упоминалось в комментариях, к платной версии PyCharm применяется следующее:
при использовании 3.x (не знаю о 2.х), я добавлю в ответ shafeen и сделать его более PyCharm конкретными, как в исходном посте. Это также работает лучше для веб-приложений или больших приложений по сравнению с простыми программами командной строки, где печать вывода в stdout может быть в порядке (еще лучше иметь возможность сортировать разные способы через Средство просмотра PyCharm).
в самом деле, делать как предложено путем создания экземпляра профиля и включения и отключения по мере необходимости. Чтобы сделать это полезным, вы захотите сохранить это в файл.
- во внешней части кода создайте экземпляр профиля.
- во внутренней части кода выполните профилирование.
- теперь позвоните pr.профиль dump_stats ('.pstat')
теперь у вас есть файл профиля, который вы хотели бы изучить. Перейдите в сервис / откройте снимок CProfile. Выбранный профиль.pstat и теперь вы можете просматривать и Сортировать по различным заголовкам по желанию.
резюме
import cProfile as profile
# In outer section of code
pr = profile.Profile()
pr.disable()
# In section you want to profile
pr.enable()
# code of interest
pr.disable()
# Back in outer section of code
pr.dump_stats('profile.pstat')
открыть файл в программе просмотра CProfile PyCharm.