Lo que trato de hacer aquí es usar una interrupción de teclado para salir de todos los hilos en curso en el programa. Esta es una versión pelado abajo de mi código donde se crea el hilo:Cerrar todos los hilos con una interrupción de teclado
for i in taskDictionary:
try:
sleep(60)
thread = Thread(target = mainModule.executeThread)
thread.start()
except KeyboardInterrupt:
thread.__stop()
El programa en sí es mucho más complicado, lo que representa toneladas de diferentes variables que afectan los hilos e incluso tienen la opción de poner en marcha de manera secuencial modo, donde las tareas no están enhebradas, sino que se lanzan una por una, por lo que podría haber algunos problemas con esta pequeña variación que acabo de conjurar. He hecho esto de forma que produjo 50/50 resultados. Las interrupciones funcionarían pero los hilos nunca saldrían limpiamente. Algunas veces continuarían pero detendrían la ejecución de hilos futuros, algunas veces saldrían con un error masivo con respecto a la interrupción, otras veces las interrupciones no harían nada. La última vez que ejecuté esto, el programa detuvo la ejecución de los hilos futuros, pero no detuvo el hilo actual. ¿Hay alguna manera de salir de los hilos sin entrar en el módulo en el que se está ejecutando el hilo?
Con la cooperación de un hilo, puede matarlo como quiera. Sin la cooperación de un hilo, no hay una forma segura de hacerlo y todos los caminos provocan dolor. –
Brillante respuesta! ¡No es exactamente lo que estaba buscando pero lo suficientemente extenso como para adaptar la lógica a lo que necesitaba! ¡Gracias por eso! – Joe
Estoy usando un hilo porque no quiero un ciclo infinito mientras sea True. Esto desperdicia todo el tiempo de tu CPU ... más o menos literalmente. He hecho algo como esto y sin dormir genera CPU% hasta 100% por ** segundos ** a la vez y con un pequeño descanso, esto solo ayuda un poco. ¿Hay alguna manera de hacer esto ** sin ** un tiempo cierto? – dylnmc