Perfilado de hilos de Python

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

Hay algunas maneras diferentes de abordar este problema. cProfile es excelente y viene con Python, sin embargo, muchas personas consideran que los perfiles de subprocesos múltiples son un problema. Una forma de solucionar esto es ejecutando instancias separadas de cProfile para cada hilo y luego combinando los resultados usando Stats.add .

Si eso no fuera tan útil como lo esperabas, otra alternativa podría ser usar Yappi , que he tenido éxito usando en algunos casos especiales de varios subprocesos. Tiene una gran documentación, por lo que no debería tener demasiados problemas para configurarlo.

Para perfiles específicos de memoria, echa un vistazo a Heapy . ¡Pero ten cuidado, puede crear algunos de los archivos de registro más grandes que hayas visto si tu código es malo!