web-dev-qa-db-fra.com

Existe-t-il un profileur visuel pour Python?

J'utilise cProfile maintenant mais je trouve fastidieux d'écrire du code pstats juste pour interroger les données statistiques.

Je cherche un outil visuel qui me montre ce que mon code Python fait en termes de temps CPU et d'allocation de mémoire.

Quelques exemples du monde Java Java sont visualvm et JProfiler .

  • Existe-t-il quelque chose comme ça?
  • Existe-t-il un IDE qui fait cela?
  • dtrace aiderait-il?

Je connais KCachegrind pour Linux, mais je préférerais quelque chose que je peux exécuter sur Windows/Mac sans installer KDE.

91
Frederik

Un ami et moi avons écrit un Python appelé SnakeViz qui s'exécute dans un navigateur Web. Si vous utilisez déjà avec succès RunSnakeRun SnakeViz peut ne pas ajouter autant de valeur, mais SnakeViz est beaucoup plus facile à installer.

Edit: SnakeViz prend en charge Python 2 et 3 et fonctionne sur tous les principaux systèmes.

77
jiffyclub

Je ne connais que RunSnakeRun .

Il y a aussi eu quelques discussions il y a quelque temps sur un profileur intégré dans PyDev (Eclipse), mais je ne sais pas si cela verra le jour.

Mise à jour: Malheureusement, il semble que RunSnakeRun ne soit plus maintenu et ne prend pas en charge Python 3.

41
nikow

J'utilise gprof2dot.py. Le résultat ressemble à comme ceci . J'utilise ces commandes:

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

Vous avez besoin de graphviz et gprof2dot.py installés. Vous pourriez aimer un script Shell de commodité .

14
maxy

Spyder fournit également une jolie interface graphique pour cProfile:

enter image description here

8
jsexauer

Python Tools pour Visual Studio contient un profileur graphique très bien fait: http://www.youtube.com/watch?v=VCx7rlPyEzE&hd=1

http://pytools.codeplex.com/

4
Jake

Cette personne a créé un profil graphique, décrit ici . Peut-être pourriez-vous l'utiliser comme point de départ pour votre propre travail.

4
PaulMcG

KCacheGrind inclut une version appelée QCacheGrind qui s'exécute sous Mac OS X et sous Windows .

3
akaihola

Essayez Snakeviz. Très facile à installer (via pip) et basé sur un navigateur.

https://jiffyclub.github.io/snakeviz/

3
BangTheBank

Python Call Graph génère des photos très similaires à celles de réponse de maxy . Il montre également le temps total pour chaque fonction, pour une raison quelconque, il ne se reflète pas dans les graphiques d'exemple.

2
Lev Levitsky

J'ai écrit un outil de visualisation basé sur un navigateur, profile_eye , qui fonctionne sur la sortie de gprof2dot .

gprof2dot est excellent pour bloquer de nombreuses sorties d'outils de profilage et fait un excellent travail pour le placement des éléments de graphique. Le rendu final est un graphique statique, souvent très encombré.

En utilisant d3.js il est possible de supprimer une grande partie de cet encombrement, grâce à la décoloration relative des éléments non focalisés, des info-bulles et une distorsion fisheye .

Pour comparaison, voir visualisation de profile_eye du exemple canonique utilisé par gprof2dot . Pour Python en particulier, voir n exemple de sortie cProfile .

1
Ami Tavory

Considérez pyflame + flamegraph

Pyflame: un profileur Ptracing pour Python + flamegraph

https://github.com/uber/pyflame

Vous pouvez tracer vers un processus python en utilisant pyflame.

1
McKelvin

J'ai utilisé plop et je l'ai trouvé très léger. Donne un aperçu rapide de la perf.

0
auny