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.


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.


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.


+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 .


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



4

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


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 .


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



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 .



0

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.