Estoy desarrollando un módulo intrínsecamente multiproceso en Python, y me gustaría saber dónde está gastando su tiempo. cProfile solo parece perfilar el hilo principal. ¿Hay alguna forma de perfilar todos los hilos involucrados en el cálculo?¿Cómo puedo perfilar un programa multiproceso en Python?
Respuesta
Consulte yappi (Yet Another Python Profiler).
No conozco ninguna aplicación de creación de perfiles que admita tal cosa para python, pero podría escribir una clase Trace que escriba archivos de registro donde se ingrese la información de cuándo se inicia una operación y cuándo finalizó. cuánto tiempo consumió.
Es una solución simple y rápida para su problema.
En lugar de ejecutar cProfile
, puede ejecutar una instancia de cProfile
por separado en cada hilo, luego combinar las estadísticas. Stats.add()
hace esto automáticamente.
no es genial cuando el programa se inicia y detiene muchos subprocesos en el transcurso del cálculo: requiere instrumentar todo el programa, lo que puede afectar gravemente los resultados. – rog
En realidad, solo tendrías que modificar el método Thread.run(). – vartec
lo que quiero decir es que la sobrecarga de crear y guardar la instancia de perfil para cada ejecución de subprocesos puede sesgar fácilmente los resultados. No creo que sea posible crear estadísticas sin guardar en un archivo. – rog
Si está de acuerdo con hacer un poco de trabajo extra, puede escribir su propia clase de creación de perfiles que implemente profile(self, frame, event, arg)
. Se llama cuando se llama a una función, y puede configurar fácilmente una estructura para recopilar estadísticas a partir de eso.
Puede usar para registrar esa función en cada hilo. Cuando se llama a la función, puede usar threading.currentThread()
para ver en qué se está ejecutando. Más información (y lista para funcionar receta) aquí:
http://code.activestate.com/recipes/465831/
http://docs.python.org/library/threading.html#threading.setprofile
Dado que las principales funciones de los diferentes hilos difieren, puede utilizar la gran ayuda profile_func()
decorador de here.
- 1. ¿Cómo puedo perfilar la memoria del programa multiproceso en Python?
- 2. capturando SIGINT en un programa multiproceso
- 3. tenedor en el programa multiproceso
- 4. java.util.ConcurrentModificationException en No multiproceso Programa
- 5. Programa Strace multiproceso
- 6. ¿Cómo activo la depuración inversa en un programa multiproceso?
- 7. ¿Cómo puedo perfilar una aplicación con SQLAlchemy?
- 8. Cómo perfilar el programa en la plataforma Linux sin reconstruir?
- 9. C ¿dónde definir un mutex en un programa de multiproceso?
- 10. Ejecución de código serie en un programa multiproceso en C++
- 11. Python multiproceso: Permiso denegado
- 12. Multiproceso de Python: ¿cómo comparto un dict entre múltiples procesos?
- 13. Diseño multiproceso de Python
- 14. multiproceso o subprocesamiento en python?
- 15. Cómo perfilar el uso de la memoria de un programa en C
- 16. ¿De qué se trata el perfilado y cómo puedo perfilar mi programa Java?
- 17. Ayuda de diseño de programa multiproceso c
- 18. ¿Cómo puedo reproducir una aplicación multiproceso?
- 19. ¿Un buen servidor web de python multiproceso?
- 20. Cómo perfilar el uso de memoria y las prestaciones de un programa openMPI en C
- 21. Cómo perfilar un programa Erlang en términos de uso de memoria?
- 22. ¿Cómo puedo encontrar pérdidas de memoria en mi programa Python?
- 23. ¿Cómo se usa callgrind para perfilar solo un cierto período de ejecución del programa?
- 24. ¿Cómo puedo perfilar el código Ruby en 1.9.2?
- 25. Python, multihilo demasiado lento, multiproceso
- 26. ¿Cómo puedo detectar SIGINT en el programa de threading python?
- 27. ¿Cómo ejecuto un programa de Python?
- 28. ¿Un rastreador multiproceso en Python realmente acelera las cosas?
- 29. Cómo perfilar MySQL
- 30. ¿Cómo se transforma un programa python .py en un programa ejecutable en Ubuntu?
Tenga en cuenta que mientras que yappi parece ser la respuesta correcta, es un código fuente C y necesita ser creado. No hay binarios preconstruidos en la página del proyecto. – velis
@velis: Puedes usar pip: 'pip install yappi'. –
¿Alguna documentación? ¿Cómo puedo ordenar los resultados para recuperar los 10 mejores consumidores de tiempo total? – Dejell