Python no imprime mensajes de rastreo de excepciones generadas en subprocesos de daemon.Impresión de excepciones de subproceso demoníaco en Python
Por ejemplo, este código crea un hilo daemonic y lanza una excepción en el nuevo hilo:
def error_raiser():
raise Exception
import threading
thread = threading.Thread(target=error_raiser)
thread.daemon = True
thread.start()
pero no imprime un rastreo. (No da salida).
Sin embargo, si el subproceso no está configurado como un subproceso de demonio, Python imprimirá la trazabilidad. Aquí es el mismo código con una línea comentada:
def error_raiser():
raise Exception
import threading
thread = threading.Thread(target=error_raiser)
# thread.daemon = True
thread.start()
y la salida:
Exception in Thread-1:
Traceback (most recent call last):
File "C:\Python26\lib\threading.py", line 525, in __bootstrap_inner
self.run()
File "C:\Python26\lib\threading.py", line 477, in run
self.__target(*self.__args, **self.__kwargs)
File "test.py", line 2, in error_raiser
raise Exception
Exception
ejecución de este código, tanto en Python 2.6.2 y Python 3.0.1 y da los mismos resultados. Curiosamente, sin embargo, si ejecuto el código importándolo en el shell de IPython, la excepción se muestra si el hilo es daemonic o no.
De acuerdo con la documentación, el único significado de la bandera 'daemon' es que "todo el programa Python se cierra cuando solo quedan hilos daemon". Esto me haría creer que no imprimir un rastreo después de una excepción es un error en Python, a menos que omita algo en la documentación.
¿Esto es un error, o he omitido algo en la documentación y este comportamiento es intencional? Si es intencional, ¿cómo puedo forzar a Python a imprimir la trazabilidad en hilos daemon sin usar IPython?
Su solución funciona muy bien para imprimir el rastreo. No pensé en intentarlo ... excepto porque dependía de Python para hacer la impresión por mí. Por cierto, creo que un hilo daemonic termina cuando sale el programa, de acuerdo con la documentación, en lugar de simplemente separar. ¡Gracias por su ayuda! –