¿Hay alguna forma de saber si un subproceso ha salido normalmente o debido a una excepción?Código de salida de subproceso de Python
9
A
Respuesta
13
Como se mencionó, un contenedor alrededor de la clase Thread podría atrapar ese estado. Aquí hay un ejemplo.
>>> from threading import Thread
>>> class MyThread(Thread):
def run(self):
try:
Thread.run(self)
except Exception as self.err:
pass # or raise
else:
self.err = None
>>> mt = MyThread(target=divmod, args=(3, 2))
>>> mt.start()
>>> mt.join()
>>> mt.err
>>> mt = MyThread(target=divmod, args=(3, 0))
>>> mt.start()
>>> mt.join()
>>> mt.err
ZeroDivisionError('integer division or modulo by zero',)
-1
Puede establecer alguna variable global a 0 si tiene éxito, o no es cero si hubo una excepción. Esta es una convención bastante estándar.
Sin embargo, deberá proteger esta variable con un mutex o semáforo. O puede asegurarse de que solo un hilo lo escriba y todos los demás lo lean.
0
Haga que su función de hilo detecte excepciones. (Puede hacerlo con una función de envoltura simple que solo llama a la función de hilo antiguo dentro de un try
... except
o try
... except
... else
bloque). Entonces la pregunta simplemente se convierte en "cómo pasar información de un hilo a otro", y supongo que ya sabes cómo hacerlo.
Cuestiones relacionadas
- 1. Subproceso de Python. Salida de salida y asíncrona
- 2. Supresión de salida en Python llamada subproceso
- 3. Salida de subproceso Python a stdout
- 4. Salida del subproceso de captura
- 5. Salida del subproceso Python en Windows?
- 6. Python: ¿Cómo redirigir la salida con subproceso?
- 7. Normas de código de salida en Python
- 8. Subproceso de python persistente
- 9. argumentos de Python subproceso
- 10. Cómo ocultar salida del subproceso en Python 2.7
- 11. Python, subproceso, devenv, ¿por qué no hay salida?
- 12. Devuelve el valor del subproceso de Python
- 13. Salida estándar de subproceso de tubería a una variable
- 14. El subproceso de Python parece ejecutar subprocesos
- 15. Subproceso de Python en paralelo
- 16. Python subproceso de Bash: llaves
- 17. El subproceso de Python devuelve un estado de salida distinto de cero en cron
- 18. subproceso python que utiliza el subproceso de importación
- 19. líneas de lectura de subproceso de Python()?
- 20. Subproceso FFMPEG y Python
- 21. El subproceso de Python obtiene la salida de los niños en archivos y terminales?
- 22. Subproceso de Python en Windows 7 64bit - sin salida cuando stdout = PIPE
- 23. Obtener salida html del código python
- 24. sustitución del subproceso de popen2 con Python
- 25. Impresión de excepciones de subproceso demoníaco en Python
- 26. obtener el código de salida para el programa python
- 27. Python: ¿salida de funciones?
- 28. Salida de tubería Python entre dos subprocesos
- 29. subproceso python con tiempo de espera y salida grande (> 64K)
- 30. Usar el módulo de subproceso Python 2.6 en Python 2.5
0 para el éxito puede ser una convención bastante estándar, pero ¿no sería un booleano 'succeded' ser un poco más fácil en el intérprete de carne? –
No tiene que ser global si subclase Thread, solo necesito una variable miembro para indicar el éxito. Me preguntaba si hay alguna forma integrada de hacerlo, como el código de salida del proceso. –
Hilos y estado global. Dos grandes gustos que tate gsrat eogetherrrrrrrrrrrrrrr Fallo de segmentación, núcleo volcado. – Glyph