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

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

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

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

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

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

Ответ 1

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

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

Ответ 2

Я знаю только RunSnakeRun.

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

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

Ответ 3

Я использую 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 установлен. Вам может понравиться удобная оболочка script.

Ответ 4

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

enter image description here

Ответ 5

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

Ответ 7

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

Ответ 8

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

Ответ 10

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

Pyflame: Ptracing Profiler для Python + плагиат

https://github.com/uber/pyflame

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

Ответ 11

Я использовал plop и нашел, что он очень легкий. Дает краткое представление о перфомансе.

Ответ 12

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

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

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

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