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
Respuesta
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.
Mi sistema es un servidor web, si utilizo 'pr = cProfile.Profile() 'en una solicitud diferente, ¿se llama ** instancias separadas de cProfile **? – user3978288
- 1. Perfilado de aplicaciones C++ de subprocesos múltiples
- 2. Perfilado de memoria PHP
- 3. Descarga de subprocesos de Python
- 4. Perfilado/monitoreo de memoria (python) en Google App Engine
- 5. Rendimiento y perfilado multiproceso
- 6. Tramas de cadena de subprocesos de Python
- 7. Perfilado en Python: ¿Quién llamó a la función?
- 8. Perfilado en vivo servidor Django?
- 9. Perfilado de asignación de memoria en C++
- 10. Herramientas de perfilado de memoria Better Flex
- 11. ¿Los subprocesos de Python tienen errores?
- 12. El subproceso de Python parece ejecutar subprocesos
- 13. Unión de subprocesos interrumpibles en Python
- 14. ¿Multiprocesamiento.Pool de Python admite subprocesos remotos?
- 15. Salida de tubería Python entre dos subprocesos
- 16. Incrustación de Python con subprocesos, ¿evitando interbloqueos?
- 17. Decapado de varios subprocesos en Python
- 18. Perfilado del rendimiento de los sombreadores OpenGL
- 19. Perfilado de PHP con microtime(): ¿Tiempo negativo?
- 20. Perfilado lento Configuración de Zend Framework MVC
- 21. Perfilado Redis Uso de la memoria
- 22. ¿Controlar la prioridad de programación de subprocesos de python?
- 23. sobreasignación de subprocesos de subprocesos de Java
- 24. Rendimiento perfilado de len (conjunto) frente a conjunto .__ len __() en Python 3
- 25. Lectura de un único archivo de varios subprocesos en python
- 26. Prioridad de subprocesos y precisión de subprocesos
- 27. Subprocesos de aplicación vs Subprocesos de servicio
- 28. Python: cuándo usar subprocesos frente a multiprocesamiento
- 29. Perfilado de C++ en presencia de alineación agresiva?
- 30. Comprensión de los resultados de perfilado en paralelo VS2010 C#
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
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