Czy istnieje program do profilowania wizualnego dla Pythona? [Zamknięte]

99

Teraz używam cProfile, ale pisanie kodu pstats tylko po to, aby przeszukiwać dane statystyczne, wydaje mi się żmudne.

Szukam narzędzia wizualnego, które pokazuje mi, co robi mój kod Pythona pod względem czasu procesora i alokacji pamięci.

Niektóre przykłady ze świata Java to visualvm i JProfiler .

  • Czy coś takiego istnieje?
  • Czy istnieje środowisko IDE, które to robi?
  • Czy dtrace pomoże?

Wiem o KCachegrind dla Linuksa, ale wolałbym coś, co mogę uruchomić na Windows / Mac bez instalowania KDE.

Frederik
źródło
5
Jeśli taki program jeszcze nie istnieje, byłby to świetny projekt open source.
Carl
@cvondrick Taki program istnieje i został już wspomniany: KCachegrind.
Devin Jeanpierre
1
@Devin, tak, ale zobacz pytanie. :-)
carl
Czy zdajesz sobie sprawę z tej techniki: stackoverflow.com/questions/375913/… To nie jest wizualne, ale też nie jest żmudne i trudno je pokonać, aby uzyskać skuteczność.
Mike Dunlavey
4
Miłośnicy @KCacheGrind: Każdy powód, dla którego nie trzeba instalować KDE, jest dobrym powodem, aby nie używać KCacheGrind.
Matt Joiner,

Odpowiedzi:

86

Razem z przyjacielem napisaliśmy przeglądarkę profili Pythona o nazwie SnakeViz, która działa w przeglądarce internetowej. Jeśli już pomyślnie korzystasz z RunSnakeRun, SnakeViz może nie dodać tak dużej wartości, ale SnakeViz jest znacznie łatwiejszy do zainstalowania.

Edycja: SnakeViz obsługuje Python 2 i 3 i działa na wszystkich głównych systemach.

jiffyclub
źródło
41

Jestem świadomy tylko RunSnakeRun .

Jakiś czas temu mówiono też o zintegrowanym profilerze w PyDev (Eclipse), ale nie wiem, czy kiedykolwiek ujrzy światło dzienne.

Aktualizacja: Niestety wygląda na to, że RunSnakeRun nie jest już utrzymywany i nie obsługuje Pythona 3.

nikow
źródło
+1 dla RunSnakeRun. Najlepsze narzędzie IMHO.
codeape
4
RunSnakeRun jest dobry, ale niestety obecnie nie działa w Pythonie 3. (prawda na czerwiec 2014 r.)
Ram Rachum
@Ram: Dzięki za informację, to niefortunne :-(.
nikow
1
Zamiast tego użyłem pyinstrument. To inne zwierzę, ale jest przydatne.
Ram Rachum
Lubię RunSnakeRun, ale bardzo nie podoba mi się sposób, w jaki wyświetla dzwoniących i wywołujących. RunSnakeRun pokaże „łączne” wartości liczby połączeń, czasu lokalnego i łącznego czasu dla każdego dzwoniącego / odbierającego. Więc możesz mieć takie rzeczy jak funkcja, która ma łączny czas 5 sekund, ale wywoływana, która ma łączny czas 100 sekund. Nie jest to intuicyjne i nie tak przydatne, jak to, co zapewnia pstats. pstats wykorzystuje informacje kontekstowe związane z daną funkcją, aby podać bardziej znaczące liczby dla statystyk dzwoniących / odbierających. Brakuje mi innej przeglądarki, co sprawia, że ​​jest to łatwo widoczne.
Vultaire,
14

Używam gprof2dot.py. Wynik wygląda następująco . Używam tych poleceń:

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

Musisz mieć zainstalowane oprogramowanie graphviz i gprof2dot.py . Może ci się spodobać wygodny skrypt powłoki .

maxy
źródło
Jeśli wyprowadzisz plik svg zamiast png (z kropką -Tsvg -o profile.svg), będziesz mógł przeszukać wykres wyjściowy za pomocą przeglądarki i będziesz mógł skalować obraz bez ząbków.
razeh
8

Spyder zapewnia również całkiem niezły interfejs użytkownika dla cProfile:

wprowadź opis obrazu tutaj

jsexauer
źródło
2
Jak wczytujesz istniejący profil?
Clément
4

Ta osoba stworzyła profil graficzny, opisany tutaj . Może mógłbyś to wykorzystać jako punkt wyjścia do własnej pracy.

PaulMcG
źródło
1
To bardzo fajne, ale najwyraźniej tylko dla C / C ++. Używa jednak Pythona.
Rory
4

KCacheGrind zawiera wersję o nazwie QCacheGrind, która działa w systemie Mac OS X i Windows .

akaihola
źródło
Ponadto OP wydaje się błędnie interpretować zależności KCachegrind w systemie Linux. W systemie Debian / Ubuntu / Mint wszystko, czego potrzebujesz, to apt-get install kcachegrindzainstalowanie tylko 3 bibliotek związanych z KDE.
saaj,
2
@saaj na instalacji Ubuntu 17.04 apt install kcachegrindchce zainstalować 102 pakiety, w tym ~ 40 bibliotek KDE.
Mark E. Haase
@mehaase Na świeżym powietrzu ubuntu:xenialmoże ich być trzy razy więcej, ale dotyczy środowiska programistycznego i prawie nie postrzegam tego jako problemu. I faktycznie 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 -lmówi tylko 13.
saaj
2

Python Call Graph generuje zdjęcia bardzo podobne do tych w odpowiedzi maxy . Pokazuje również całkowity czas dla każdej funkcji, z jakiegoś powodu nie jest odzwierciedlony na przykładowych wykresach.

Lev Levitsky
źródło
1

Napisałem oparte na przeglądarce narzędzie do wizualizacji, profile_eye , które działa na wyjściu gprof2dot .

gprof2dot świetnie radzi sobie z analizowaniem wyników wielu narzędzi do profilowania i świetnie radzi sobie z umieszczaniem elementów wykresu. Ostateczne renderowanie to statyczna grafika, która często jest bardzo zagracona.

Korzystając z d3.js , można usunąć większość tego bałaganu, poprzez względne zanikanie nieostre elementy, podpowiedzi i zniekształcenie typu rybie oko .

Dla porównania, zobacz wizualizację profile_eye jest na przykład używane przez gprof2dot kanonicznej . W szczególności w przypadku języka Python zobacz przykład danych wyjściowych cProfile .

Ami Tavory
źródło
1

Weźmy pod uwagę pyflame + flamegraph

Pyflame: Ptracing Profiler dla Pythona + flamegraph

https://github.com/uber/pyflame

Możesz prześledzić działający proces w Pythonie za pomocą pyflame.

McKelvin
źródło
0

Użyłem plop i stwierdziłem, że jest bardzo lekki. Daje szybki wgląd w perf.

auny
źródło
vprof jest podobnym narzędziem, które również wykorzystuje flamegraf, ale może również wykonywać profilowanie pamięci. Niestety pokazuje tylko skumulowany czas, a nie całkowity czas spędzony na funkcji.
goodmami