2010-11-03 12 views
5

Dans mon programme python, j'ai utilisé beaucoup de modules et j'essaie d'avoir un compte des fonctions appelées et des chaînes d'appel impliquées. Y a-t-il un outil/module en python qui me fournira ces statistiques.Profileurs de graphes d'appel en Python

+1

Demandez-vous vraiment "Comment puis-je trouver les goulots d'étranglement dans mon code python afin que je puisse le faire fonctionner f aster"? –

+0

bien à certains niveaux oui. C'est juste que si la chaîne d'appel des fonctions pour un événement particulier est assez longue, alors je préférerais substituer avec une méthode alternative efficace si je peux. – Rahul

Répondre

6

Je l'ai utilisé cela. Cela n'a pas fonctionné pour mon but puisque mon application a plusieurs threads fonctionnant immédiatement et que j'ai fini avec 12000 liens et que graphviz n'a pas pu le compiler. Mais cela a fonctionné quand je l'ai couru sur un seul fil.

http://pycallgraph.slowchop.com/

3

pydoc profil -k

vous donnera une liste de ce qui est sur votre système. J'ai utilisé profile et cProfile.

Il est aussi simple que:


if __name__ == '__main__': 
if PROFILING: 
    import cProfile 
    cProfile.run("main()") 
else: 
    main() 
+0

je diid essayer plus tôt .. et j'obtiens l'erreur, c'est pourquoi je cherchais un outil/module qui le rendra plus facile pour moi – Rahul

+0

Quel est le texte exact de votre erreur? –

+0

Traceback (dernier appel en dernier): Fichier "test.py", ligne 12, en cProfile.run ("main()") Fichier "/usr/lib/python2.6/cProfile.py", ligne 36, en terme résultat = prof.print_stats (tri) fichier "/usr/lib/python2.6/cProfile.py", ligne 80, dans print_stats de pstats à l'importation de ImportError: Aucun module nommé pstats – Rahul

1

Six ans plus tard, j'ai la même question, certains people recommend à utiliser KCachegrind pour visualiser les chaînes d'appel. Bien qu'il s'agisse d'une option valide pour les utilisateurs de Linux, il est extrêmement difficile à installer sur Mac OSX et probablement aussi sur Windows.

Enfin, j'utilise gprof2dot à la place. Avec quelques commandes que vous aurez votre graphe d'appel expressif:

python -m cProfile -o output.pstats path/to/your/script arg1 arg2 
gprof2dot.py -f pstats output.pstats | dot -Tpng -o output.png 

outil facile, des résultats rapides: vérifier: https://github.com/jrfonseca/gprof2dot

Edit:

Maintenant, je découvert que vous pouvez obtenir KCachegrind aussi via le brassage: brew install qcachekrind