2015-10-03 2 views
6

У меня запущена относительно сложная программа python, и в ней есть симуляция montecarlo, которая занимает большую часть времени. Я хотел бы узнать, какая часть его использует большинство ресурсов, поэтому я могу сделать это быстрее.Профилирование программы python с помощью PyCharm (или любой другой IDE)

Я использую PyCharm Professional edition и пытаюсь использовать профилировщик, но результатом является только большой список нерелевантных функций, о которых я никогда не слышал.

Вопросы: Есть ли хороший профилировщик, который я могу использовать, который дает значимые результаты, чтобы я мог видеть, какая функция или ключевое слово использует большинство ресурсов в моем моделировании montecarlo?

+1

Не ходите очень долго, не пытаясь [* this *] (http://stackoverflow.com/a/4299378/23771). Это ничего не стоит и удивительно эффективно говорить вам, что требует времени. –

ответ

6

В зависимости от ваших потребностей и версии python, возможно, вы хотите использовать что-то вроде hotshot. https://docs.python.org/2/library/hotshot.html

EDIT:

Для питона 3.4 Cprofile, вероятно, один из лучших вариантов у вас есть в наличии, но вы, безусловно, придется фильтровать результаты Grep/СЭД/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") 
+0

Я использую Python 3.4. – Nickpick

+0

Я отредактировал свой ответ для Python3. – shafeen

3

Примечание: Как уже упоминалось в комментариях, ниже относится к платной версии PyCharm:

при использовании 3.x (не знаю о 2.x), я буду добавить в shafee n и сделать его более специфичным для PyCharm в соответствии с исходным сообщением. Это также лучше работает для веб-приложений или более крупных приложений по сравнению с простыми программами командной строки, где печать вывода на stdout может быть в порядке (еще лучше иметь возможность сортировать по-разному с помощью средства просмотра PyCharm).

В самом деле, сделайте так, как это было предложено, создав экземпляр профиля и включив и отключив при необходимости. Чтобы сделать это полезным, вы должны сохранить его в файле.

  • В наружной части вашего кода создается экземпляр профиля.
  • Во внутренней части вашего кода выполняйте профилирование.
  • Теперь вызовите pr.dump_stats («profile.pstat»)

Теперь у вас есть файл профиля, который вы хотели бы изучить. Откройте «Инструменты». Откроется моментальный снимок CProfile. Выберите profile.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 в.

+2

К сожалению, профайлер-плагин находится в профессиональной (несвободной) версии PyCharm. – user1735003

Смежные вопросы