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 .
Je connais KCachegrind pour Linux, mais je préférerais quelque chose que je peux exécuter sur Windows/Mac sans installer KDE.
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.
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.
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é .
Spyder fournit également une jolie interface graphique pour cProfile:
Python Tools pour Visual Studio contient un profileur graphique très bien fait: http://www.youtube.com/watch?v=VCx7rlPyEzE&hd=1
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.
KCacheGrind inclut une version appelée QCacheGrind qui s'exécute sous Mac OS X et sous Windows .
Essayez Snakeviz. Très facile à installer (via pip) et basé sur un navigateur.
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.
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 .
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.
J'ai utilisé plop et je l'ai trouvé très léger. Donne un aperçu rapide de la perf.