En primer lugar, al configurar los controladores de señal utilizando el módulo signal
, debe crearlos en el hilo principal. Recibirá una excepción si intenta crearlos en un hilo separado.
Los manejadores de señal registrados a través de la función signal.signal()
siempre serán llamados en el hilo principal. En las arquitecturas que soportan enviar señales a hilos, en el nivel C, creo que el tiempo de ejecución de Python ignora todas las señales en los hilos y tiene un manejador de señal en el hilo principal, que utiliza para enviar a su manejador de señal de código Python.
La documentación para el módulo thread
establece que el KeyboardInterrupt
excepción (que de ordinario se desencadena por SIGINT
) puede ser delivered to an arbitrary thread a menos que tenga el módulo signal
a su disposición, que todos los sistemas Unix deberían tener. En ese caso, se entrega al hilo principal. Si está en un sistema sin signal
, tendrá que atrapar KeyboardInterrupt
en su hilo y llamar al thread.interrupt_main()
para volver a subirlo en el hilo principal.
Más información se puede encontrar en los documentos de Python para los módulos thread
y signal
.
Interesante, pensé que solo el hilo principal recibiría 'KeyboardInterrupt's. –
¡Sí! Quién sabe por qué no lo es. –
En mi experiencia, y al leer la documentación, cuando el módulo 'signal' está disponible,' KeyboardInterrupt' solo se entrega al hilo principal. – Miles