Профилирование программы 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.