2010-11-03 10 views
5

En mi programa python he usado muchos módulos y estoy tratando de contar las funciones llamadas y las cadenas de llamadas involucradas. ¿Hay una herramienta/módulo en Python que me proporcione estas estadísticas?Profilers de Call-graph en Python

+1

¿Realmente está preguntando "¿Cómo puedo encontrar los cuellos de botella en mi código python para que pueda hacerlo funcionar f aster"? –

+0

bien en algunos niveles sí. Es solo que si la cadena de llamadas de funciones para un evento en particular es bastante larga, entonces preferiría sustituir con un método alternativo eficiente si pudiera. – Rahul

Respuesta

6

He utilizado este. No funcionó para mis propósitos ya que mi aplicación tiene muchos hilos ejecutándose a la vez y terminé con 12000 enlaces y graphviz no pudo compilarlo. Pero funcionó cuando lo ejecuté en un solo hilo.

http://pycallgraph.slowchop.com/

3

pydoc perfil -k

le dará una lista de lo que hay en el sistema. He usado profile y cProfile.

Es tan fácil como:


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

i diid intente eso antes ... y obtengo un error, es por eso que estaba buscando una herramienta/módulo que me facilitará – Rahul

+0

¿Cuál es el texto exacto de su error? –

+0

Traza (última llamada más reciente): Archivo "test.py", línea 12, en cProfile.run ("main()") Archivo "/usr/lib/python2.6/cProfile.py", línea 36, ​​en el plazo resultado = prof.print_stats (clasificar) archivo "/usr/lib/python2.6/cProfile.py", la línea 80, en print_stats pstats importación ImportError: Ningún módulo llamado pstats – Rahul

1

Seis años más tarde, tengo la misma pregunta, algunos people recommend de usar KCachegrind para la visualización de cadenas de llamadas. Si bien es una opción válida para los usuarios de Linux, es extremadamente difícil de instalar en Mac OSX y probablemente también en Windows.

Finalmente, estoy usando gprof2dot en su lugar. Con sólo unos pocos comandos que tendrá su gráfico de llamadas expresiva:

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

herramienta fácil, resultados rápidos: comprobar que funciona: https://github.com/jrfonseca/gprof2dot

Editar:

Ahora se enteraron puede obtener KCachegrind también a través de brew: brew install qcachekrind