Есть ли визуальный профилировщик для Python? [закрыто]


99

Сейчас я использую cProfile, но мне утомительно писать код pstats только для запроса статистических данных.

Я ищу визуальный инструмент, который показывает, что делает мой код Python с точки зрения процессорного времени и распределения памяти.

Некоторые примеры из мира Java - visualvm и JProfiler .

  • Есть ли что-то подобное?
  • Есть ли IDE, которая это делает?
  • Поможет ли dtrace ?

Я знаю о KCachegrind для Linux, но я бы предпочел что-нибудь, что я могу запустить на Windows / Mac без установки KDE.


5
Если такой программы еще не существует, это был бы отличный проект с открытым исходным кодом.
Карл

@cvondrick Такая программа существует и уже упоминалась: KCachegrind.
Devin Jeanpierre

1
@Devin, да, но послушайте вопрос. :-)
carl

Знаете ли вы об этой технике: stackoverflow.com/questions/375913/… Это не наглядно, но и не утомительно, и его трудно превзойти по эффективности.
Майк Данлэви, 01

4
Любители @KCacheGrind: любая причина, по которой не нужно устанавливать KDE, является хорошей причиной не использовать KCacheGrind.
Мэтт Джойнер

Ответы:


86

Мы с другом написали программу просмотра профилей Python под названием SnakeViz, которая запускается в веб-браузере. Если вы уже успешно используете RunSnakeRun, SnakeViz может не добавить такой ценности, но SnakeViz намного проще установить.

Изменить: SnakeViz поддерживает Python 2 и 3 и работает во всех основных системах.


41

Я в курсе только RunSnakeRun .

Некоторое время назад также были разговоры об интегрированном профилировщике в PyDev (Eclipse), но я не знаю, увидит ли это когда-нибудь свет.

Обновление: к сожалению, похоже, что RunSnakeRun больше не поддерживается, и он не поддерживает Python 3.


+1 за RunSnakeRun. Лучший инструмент ИМХО.
codeape

4
RunSnakeRun хорош, но, к сожалению, в настоящее время он не работает в Python 3. (Верно на июнь 2014 г.)
Рам Рачум,

@Ram: Спасибо за информацию, это прискорбно :-(.
nikow

1
Вместо этого я использовал пиинструмент. Это другое животное, но полезное.
Ram Rachum

Мне нравится RunSnakeRun, но мне очень не нравится, как он отображает звонящих и вызываемых. RunSnakeRun покажет «общие» значения счетчика вызовов, местного времени и совокупного времени для каждого вызывающего / вызываемого абонента. Итак, у вас могут быть такие вещи, как функция, совокупное время которой составляет 5 секунд, но вызываемый объект, совокупное время которого составляет 100 секунд. Не настолько интуитивно понятен и не так полезен, как то, что предоставляет pstats. pstats использует контекстную информацию, относящуюся к рассматриваемой функции, чтобы дать более значимые числа для статистики вызывающего / вызываемого. Неизвестно о другом зрителе, который делает это легко видимым.
Vultaire

14

Я использую gprof2dot.py. Результат выглядит так . Я использую эти команды:

  python -m cProfile -o profile.dat my_program.py
  gprof2dot.py -f pstats profile.dat | dot -Tpng -o profile.png

Вам необходимо установить graphviz и gprof2dot.py . Вам может понравиться удобный сценарий оболочки .


Если вы выводите svg вместо png (с точкой -Tsvg -o profile.svg), вы сможете искать выходной график в своем браузере, и вы сможете масштабировать изображение без зазубрин.
разех

8

Spyder также предоставляет довольно красивый графический интерфейс для cProfile:

введите описание изображения здесь


2
Как загрузить существующий профиль?
Clément


4

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


1
Это очень круто, но, видимо, только для C / C ++. Однако он использует питон.
Рори

4

KCacheGrind включает версию под названием QCacheGrind, которая работает в Mac OS X и в Windows .


Более того, OP, похоже, неверно интерпретирует зависимости KCachegrind в Linux. В Debian / Ubuntu / Mint все, что вам нужно, это apt-get install kcachegrindустановить всего 3 библиотеки, относящиеся к KDE.
saaj

2
@saaj при установке Ubuntu 17.04 apt install kcachegrindхочет установить 102 пакета, включая ~ 40 библиотек KDE.
Марк Э. Хаасе

@mehaase В свежем виде ubuntu:xenialможет быть в три раза больше, но это для среды разработки, и я почти не вижу в этом проблемы. И на самом деле apt-cache depends --recurse --no-recommends --no-suggests --no-conflicts --no-breaks --no-replaces --no-enhances --no-pre-depends kcachegrind | grep kde | grep Depends | sort -u | wc -lговорит только 13.
saaj



1

Я написал инструмент визуализации на основе браузера, profile_eye , который работает с выводом gprof2dot .

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

Используя d3.js , можно удалить большую часть этого беспорядка за счет относительного выцветания несфокусированных элементов, всплывающих подсказок и искажения «рыбий глаз» .

Для сравнения см визуализации profile_eye в о каноническом примере используется gprof2dot . В частности, для Python см. Пример вывода cProfile .



0

Я использовал plop и обнаружил, что он очень легкий. Дает быстрое представление о производительности.


vprof - аналогичный инструмент, который также использует флеймограф, но также может выполнять профилирование памяти. К сожалению, он показывает только совокупное время, а не общее время, потраченное на функцию.
goodmami
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.