Есть ли визуальный профилировщик для 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 и работает во всех основных системах.

jiffyclub
источник
41

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

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

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

nikow
источник
+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 . Вам может понравиться удобный сценарий оболочки .

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

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

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

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

Инструменты Python для Visual Studio содержат очень хорошо сделанный графический профилировщик: http://www.youtube.com/watch?v=VCx7rlPyEzE&hd=1

http://pytools.codeplex.com/

Джейк
источник
1
Да, я использую этот профилировщик для своих материалов .Net. Это просто подчеркивает, насколько печален cprofile ...
Basic
4

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

PaulMcG
источник
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
2

Python Call Graph генерирует картинки, очень похожие на те, что в ответе maxy . Он также показывает общее время для каждой функции, по какой-то причине это не отражено в примерах графиков.

Лев Левицкий
источник
1

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

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

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

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

Ами Тавори
источник
1

Рассмотрим pyflame + flamegraph

Pyflame: профилировщик Ptracing для Python + flamegraph

https://github.com/uber/pyflame

Вы можете отслеживать запущенный процесс Python с помощью pyflame.

Маккельвин
источник
0

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

тетенька
источник
vprof - аналогичный инструмент, который также использует флеймограф, но также может выполнять профилирование памяти. К сожалению, он показывает только совокупное время, а не общее время, потраченное на функцию.
goodmami