Чи є візуальний профілер для Python? [зачинено]


99

Зараз я використовую cProfile, але мені здається нудним писати код pstats просто для запиту даних статистики.

Я шукаю візуальний інструмент, який показує мені, що робить мій код Python з точки зору розподілення часу та пам'яті процесора.

Деякі приклади із світу Java - Visualvm та JProfiler .

  • Чи існує щось подібне?
  • Чи є IDE, який робить це?
  • Чи допоможе dtrace ?

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


5
Якщо такої програми ще не існує, це був би чудовий проект з відкритим кодом.
Карл

@cvondrick Така програма існує, і вже згадувалося: KCachegrind.
Девін Жанп'єр

1
@Devin, так, але дивіться питання. :-)
carl

Чи знаєте ви про цю методику: stackoverflow.com/questions/375913/… Це не візуально, але й не стомлено, і важко перемогти за ефективність.
Майк Данлаве

4
@KCacheGrind любителів: Будь-яка причина не встановлювати KDE є вагомою причиною не використовувати KCacheGrind.
Метт Столяр

Відповіді:


86

Ми з другом написали програму перегляду профілю Python під назвою SnakeViz, яка працює у веб-браузері. Якщо ви вже успішно використовуєте RunSnakeRun, SnakeViz може не додати такої величини, але SnakeViz встановити набагато простіше.

Редагувати: SnakeViz підтримує Python 2 і 3 та працює у всіх основних системах.


41

Мені відомо лише RunSnakeRun .

Деякий час тому було розмовляти про інтегрований профілер у PyDev (Eclipse), але я не знаю, чи побачить це колись світло дня.

Оновлення: На жаль, схоже, що RunSnakeRun більше не підтримується, і він не підтримує Python 3.


+1 для RunSnakeRun. Найкращий інструмент ІМХО.
кодеп

4
RunSnakeRun хороший, але, на жаль, наразі він не працює в Python 3. (Правда, червень 2014 року)
Ram Rachum

@Ram: Дякую за інформацію, що прикро :-(.
nikow

1
Я замість цього використовував піінструмент. Це інша тварина, але вона корисна.
Рам Рачум

Мені подобається 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), ви зможете шукати графік виводу у вашому браузері, і ви зможете масштабувати зображення без джгутів.
razeh



4

Ця людина створила графічний профіль, описаний тут . Можливо, ви могли б використати це як вихідну точку для власної роботи.


1
Це дуже круто, але, мабуть, лише для C / C ++. Однак він використовує python.
Rory

4

KCacheGrind включає версію QCacheGrind, яка працює на Mac OS X та Windows .


Більше того, ОП, здається, неправильно трактує залежності 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.