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.


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.


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.


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


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



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.


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 .


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



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 .



0

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.