Esiste un visual profiler per Python? [chiuso]


99

Ora uso cProfile ma trovo noioso scrivere codice pstats solo per interrogare i dati statistici.

Sto cercando uno strumento visivo che mi mostri cosa sta facendo il mio codice Python in termini di tempo della CPU e allocazione della memoria.

Alcuni esempi dal mondo Java sono visualvm e JProfiler .

  • Esiste qualcosa di simile?
  • C'è un IDE che fa questo?
  • Dtrace sarebbe d' aiuto?

Conosco KCachegrind per Linux, ma preferirei qualcosa che posso eseguire su Windows / Mac senza installare KDE.


5
Se un programma come questo non esiste ancora, sarebbe un ottimo progetto open source.
carl

@cvondrick Un programma come questo esiste ed è stato già menzionato: KCachegrind.
Devin Jeanpierre

1
@ Devin, sì, ma guarda la domanda. :-)
carl

Sei a conoscenza di questa tecnica: stackoverflow.com/questions/375913/… Non è visiva, ma non è nemmeno noiosa ed è difficile da battere per l'efficacia.
Mike Dunlavey

4
Amanti di @KCacheGrind: qualsiasi motivo per non dover installare KDE è un buon motivo per non usare KCacheGrind.
Matt Joiner

Risposte:


86

Un amico e io abbiamo scritto un visualizzatore di profili Python chiamato SnakeViz che funziona in un browser web. Se stai già utilizzando con successo RunSnakeRun SnakeViz potrebbe non aggiungere molto valore, ma SnakeViz è molto più facile da installare.

Modifica: SnakeViz supporta Python 2 e 3 e funziona su tutti i principali sistemi.


41

Sono a conoscenza solo di RunSnakeRun .

Qualche tempo fa si è parlato anche di un profiler integrato in PyDev (Eclipse), ma non so se vedrà mai la luce.

Aggiornamento: purtroppo sembra che RunSnakeRun non sia più mantenuto e non supporti Python 3.


+1 per RunSnakeRun. Lo strumento migliore IMHO.
codeape

4
RunSnakeRun è buono, ma sfortunatamente non funziona attualmente in Python 3. (Vero per giugno 2014)
Ram Rachum

@Ram: Grazie per le informazioni, è un peccato :-(.
nikow

1
Ho usato invece pyinstrument. È un animale diverso, ma è utile.
Ram Rachum

Mi piace RunSnakeRun, ma non mi piace molto il modo in cui visualizza chiamanti e chiamati. RunSnakeRun mostrerà i valori "totali" per il conteggio delle chiamate, l'ora locale e il tempo cumulativo per ogni chiamante / chiamato. Quindi, puoi avere cose come una funzione che ha un tempo cumulativo di 5 secondi ma un chiamato che ha un tempo cumulativo di 100 secondi. Non così intuitivo e non così utile come quello che fornisce pstats. pstats utilizza le informazioni contestuali relative alla funzione in questione per fornire numeri più significativi per le statistiche del chiamante / chiamato. Non è a conoscenza di un altro visualizzatore che lo rende facilmente visualizzabile.
Vultaire

14

Uso gprof2dot.py. Il risultato è questo . Uso questi comandi:

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

Hai bisogno di graphviz e gprof2dot.py installati. Potrebbe piacerti uno script di shell comodo .


Se esegui l'output in formato svg invece di png (con punto -Tsvg -o profile.svg) sarai in grado di cercare il grafico di output con il tuo browser e sarai in grado di ridimensionare l'immagine senza frastagliature.
razeh



4

Questa persona ha creato un profilo grafico, descritto qui . Forse potresti usarlo come punto di partenza per il tuo lavoro.


1
È molto interessante, ma a quanto pare solo per C / C ++. Però usa python.
Rory

4

KCacheGrind include una versione chiamata QCacheGrind che funziona su Mac OS X e su Windows .


Inoltre OP sembra interpretare erroneamente le dipendenze per KCachegrind su Linux. Su Debian / Ubuntu / Mint tutto ciò di cui hai bisogno è apt-get install kcachegrindche installa solo 3 librerie relative a KDE.
saaj

2
@saaj sull'installazione di Ubuntu 17.04, apt install kcachegrindvuole installare 102 pacchetti, incluse ~ 40 librerie KDE.
Mark E. Haase

@mehaase Sul fresco ubuntu:xenialpotrebbe essere tre volte di più, ma è per un ambiente di sviluppo e lo vedo a malapena come un problema. E in realtà 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 -ldice solo 13.
saaj



1

Ho scritto uno strumento di visualizzazione basato su browser, profile_eye , che opera sull'output di gprof2dot .

gprof2dot è ottimo per raccogliere molti output di strumenti di profilatura e fa un ottimo lavoro nel posizionamento degli elementi grafici. Il rendering finale è una grafica statica, spesso molto disordinata.

Usando d3.js è possibile rimuovere gran parte di quel disordine, attraverso la relativa dissolvenza di elementi sfocati, suggerimenti e una distorsione a occhio di pesce .

Per confronto, vedere la visualizzazione di profile_eye dell'esempio canonico utilizzato da gprof2dot . Per Python in particolare, vedere un esempio di output di cProfile .



0

Ho usato plop e l'ho trovato molto leggero. Fornisce una rapida panoramica della perf.


vprof è uno strumento simile che usa anche il flamegraph, ma può anche fare il profilo della memoria. Purtroppo mostra solo il tempo cumulativo e non il tempo totale trascorso in una funzione.
goodmami
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.