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. ¿Multiprocesamiento.Pool de Python admite subprocesos remotos?
- 12. ¿Los subprocesos de Python tienen errores?
- 13. Decapado de varios subprocesos en Python
- 14. El subproceso de Python parece ejecutar subprocesos
- 15. Incrustación de Python con subprocesos, ¿evitando interbloqueos?
- 16. Salida de tubería Python entre dos subprocesos
- 17. Unión de subprocesos interrumpibles en Python
- 18. Perfilado de PHP con microtime(): ¿Tiempo negativo?
- 19. Perfilado lento Configuración de Zend Framework MVC
- 20. Perfilado del rendimiento de los sombreadores OpenGL
- 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. Subprocesos de aplicación vs Subprocesos de servicio
- 27. Prioridad de subprocesos y precisión de subprocesos
- 28. Python: cuándo usar subprocesos frente a multiprocesamiento
- 29. Comprensión de los resultados de perfilado en paralelo VS2010 C#
- 30. Perfilado de C++ en presencia de alineación agresiva?
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