La forma threading.Thread
(y por lo tanto threading.Timer
) funciona es que cada hilo en sí se registra con el módulo threading
, y al salir intérprete el El intérprete esperará a que todos los hilos registrados salgan antes de terminar el intérprete propiamente dicho. Esto se hace para que los hilos realmente terminen la ejecución, en lugar de tener el intérprete eliminado brutalmente de ellos. Entonces, cuando toca^C, el hilo principal recibe la señal, decide terminar y espera a que finalicen los temporizadores.
Puede establecer hilos daemonic (con el método setDaemon
) para hacer que el módulo threading no esperó a que estos hilos, pero si llegan a ser la ejecución de código Python, mientras que las salidas de interpretación, se obtienen errores confusos durante la salida. Incluso si cancela el threading.Timer
(y lo configura daemonic), puede despertarse mientras se destruye el intérprete, ya que el método threading.Timer
cancel
le dice al threading.Timer
que no ejecute nada cuando se despierta, pero tiene que ejecutarse realmente Código de Python para hacer esa determinación.
No hay una manera elegante de terminar subprocesos (que no sea el actual), y no existe una manera confiable de interrumpir un subproceso bloqueado. Un enfoque más manejable para los temporizadores suele ser un ciclo de eventos, como los que las GUI y otros sistemas basados en eventos le ofrecen. Qué usar depende completamente de qué más su programa estará haciendo.
¿es posible pegar el código aquí? – Rahul