2010-02-07 18 views
9

Estoy intentando averiguar cómo medir el rendimiento de varios subprocesos de python en mi aplicación. Actualmente tengo varias tareas que se ejecutan en diferentes subprocesos según la entrada del usuario y me gustaría medir el tiempo de ejecución, incluso el consumo de memoria de cada uno de los subprocesos. Intenté usar cProfile (en cada instanciación del hilo, luego escribí los datos en un archivo y luego agregué todos los resultados) con un éxito limitado. Además, tengo un problema adicional de tener un IO de bloqueo que está sesgando mis resultados. ¿Hay alguna forma de perfilar efectivamente mi aplicación?Perfilado de subprocesos de Python

+1

Al usar cProfile, ¡has tenido un gran comienzo! Si pudiera explicar un poco más acerca de su "éxito limitado" con cProfile, probablemente podríamos ayudar a solucionarlo y continuar desde allí. – KushalP

+0

Como nota no relacionada, es posible que desee considerar varios procesos en lugar de varios subprocesos: http://en.wikipedia.org/wiki/Global_Interpreter_Lock – badp

Respuesta

3

Existen varias maneras diferentes de abordar este problema. cProfile es genial y viene con Python, sin embargo, muchas personas ven los perfiles con subprocesos múltiples como un problema. Una forma de evitar esto es ejecutar instancias separadas de cProfile para cada subproceso y luego combinar los resultados usando Stats.add.

En caso de que no sea tan útil como esperaba, otra alternativa podría ser utilizar Yappi, que he tenido éxito utilizando para algunos casos especiales de múltiples subprocesos. Tiene una gran documentación por lo que no debería tener demasiados problemas para configurarlo.

Para perfiles específicos de memoria, consulte Heapy. Pero ten en cuenta que puede crear algunos de los archivos de registro más grandes que hayas visto si tu código es malo.

+0

Mi sistema es un servidor web, si utilizo 'pr = cProfile.Profile() 'en una solicitud diferente, ¿se llama ** instancias separadas de cProfile **? – user3978288

Cuestiones relacionadas