Existe-t-il un profileur visuel pour Python? [fermé]

99

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

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

Quelques exemples du monde Java sont visualvm et JProfiler .

  • Est-ce que quelque chose comme ça existe?
  • Y a-t-il un IDE qui fait cela?
  • Serait dtrace aide?

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

Frederik
la source
5
Si un programme comme celui-ci n'existe pas encore, ce serait un excellent projet open source.
carl
@cvondrick Un programme comme celui-ci existe et a déjà été mentionné: KCachegrind.
Devin Jeanpierre
1
@Devin, oui mais voyez la question. :-)
carl
Connaissez-vous cette technique: stackoverflow.com/questions/375913/... Ce n'est pas visuel, mais ce n'est pas non plus fastidieux, et c'est difficile à battre pour l'efficacité.
Mike Dunlavey
4
Amoureux de @KCacheGrind: Toute raison de ne pas avoir à installer KDE est une bonne raison de ne pas utiliser KCacheGrind.
Matt Joiner

Réponses:

86

Un ami et moi avons écrit une visionneuse de profil Python appelée SnakeViz qui s'exécute dans un navigateur Web. Si vous utilisez déjà avec succès RunSnakeRun SnakeViz n'ajoutera peut-être pas beaucoup 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.

jiffyclub
la source
41

Je ne connais que RunSnakeRun .

Il y a quelque temps, on a également parlé d'un profileur intégré dans PyDev (Eclipse), mais je ne sais pas si cela verra un jour le jour.

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

nikow
la source
+1 pour RunSnakeRun. Le meilleur outil IMHO.
codeape
4
RunSnakeRun est bon, mais malheureusement cela ne fonctionne pas actuellement en Python 3. (Vrai pour juin 2014.)
Ram Rachum
@Ram: Merci pour l'info, c'est dommage :-(.
nikow
1
J'ai utilisé pyinstrument à la place. C'est un animal différent, mais c'est utile.
Ram Rachum
J'aime RunSnakeRun, mais je n'aime pas du tout la façon dont il affiche les appelants et les appelants. RunSnakeRun affichera les valeurs «totales» pour le nombre d'appels, l'heure locale et le temps cumulé pour chaque appelant / appelé. Ainsi, vous pouvez avoir des choses comme une fonction qui a un temps cumulé de 5 secondes mais un appelé qui a un temps cumulé de 100 secondes. Pas si intuitif et pas aussi utile que ce que fournit pstats. pstats utilise des informations contextuelles liées à la fonction en question pour donner des nombres plus significatifs pour les statistiques de l'appelant / appelé. Je ne suis pas au courant d'un autre spectateur, ce qui le rend facilement visible.
Vultaire
14

J'utilise gprof2dot.py. Le résultat ressemble à 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 devez installer graphviz et gprof2dot.py . Vous aimerez peut-être un script shell pratique .

maxy
la source
Si vous sortez svg au lieu de png (avec le point -Tsvg -o profile.svg), vous pourrez rechercher le graphique de sortie avec votre navigateur, et vous pourrez redimensionner l'image sans jaggies.
razeh
8

Spyder fournit également une jolie interface graphique pour cProfile:

entrez la description de l'image ici

jsexauer
la source
2
Comment charger un profil existant?
Clément
4

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

PaulMcG
la source
1
C'est très cool, mais apparemment uniquement pour C / C ++. Il utilise cependant python.
Rory
4

KCacheGrind inclut une version appelée QCacheGrind qui fonctionne sur Mac OS X et Windows .

Akaihola
la source
De plus, OP semble mal interpréter les dépendances de KCachegrind sous Linux. Sur Debian / Ubuntu / Mint, tout ce dont vous avez besoin est d' apt-get install kcachegrindinstaller seulement 3 bibliothèques liées à KDE.
saaj le
2
@saaj sur l'installation d'Ubuntu 17.04, apt install kcachegrindsouhaite installer 102 packages, y compris ~ 40 bibliothèques KDE.
Mark E. Haase
@mehaase Sur frais, ubuntu:xenialil peut y en avoir trois fois plus, mais c'est pour un environnement de développement et je le vois à peine comme un problème. Et 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 -ldit en fait juste 13.
saaj
2

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

Lev Levitsky
la source
1

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

gprof2dot est excellent pour gérer de nombreuses sorties d'outils de profilage et fait un excellent travail pour le placement des éléments graphiques. 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 .

À titre de comparaison, voir la visualisation par profile_eye de l' exemple canonique utilisé par gprof2dot . Pour Python en particulier, consultez un exemple de sortie cProfile .

Ami Tavory
la source
1

Considérez pyflame + flammegraph

Pyflame: Un Profiler Ptracing Pour Python + Flamegraph

https://github.com/uber/pyflame

Vous pouvez suivre un processus python en cours d'exécution à l'aide de pyflame.

McKelvin
la source
0

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

auny
la source
vprof est un outil similaire qui utilise également le flamegraph, mais il peut également effectuer un profilage de la mémoire. Malheureusement, il ne montre que le temps cumulé et non le temps total passé dans une fonction.
goodmami