thread - stop hilo python
Ctrl-c, es decir, KeyboardInterrupt para matar hilos en python (2)
El problema es que estás usando thread1.join()
, lo que hará que tu programa espere hasta que ese hilo termine para continuar.
Las señales siempre serán capturadas por el proceso principal, ya que es el que recibe las señales, es el proceso que tiene hilos.
Haciéndolo como se muestra, básicamente está ejecutando una aplicación ''normal'', sin características de subproceso, al iniciar 1 subproceso y esperar hasta que termine para continuar.
Leí en algún lugar que la excepción KeyboardInterrupt solo se lee en el hilo principal de Python. También leí que el hilo principal está bloqueado mientras se ejecuta el hilo secundario. Entonces, ¿significa esto que CTRL + C nunca puede llegar al subproceso secundario? Probé el siguiente código:
def main():
try:
thread1.start() #thread is totally blocking e.g. while (1)
thread1.join()
except KeyboardInterrupt:
print "Ctrl-c pressed ..."
sys.exit(1)
En este caso, no hay ningún efecto de CTRL + C en la ejecución. Es como si no fuera capaz de escuchar la interrupción. ¿Estoy entendiendo esto de la manera incorrecta? ¿Hay alguna otra manera de matar el hilo usando CTRL + C ?
Si desea que el subproceso principal reciba la señal CTRL + C mientras se une, puede hacerlo agregando un tiempo de espera para la llamada join()
.
Lo siguiente parece estar funcionando (no olvides agregar daemon=True
si quieres que main termine):
thread1.start()
while True:
thread1.join(600)
if not thread1.isAlive():
break