threading thread stop how finish detener close python multithreading

python - thread - Detener un hilo después de una cierta cantidad de tiempo



python thread close (2)

Estoy buscando terminar algunos hilos después de un cierto período de tiempo. Estos subprocesos se ejecutarán en un bucle while infinito y durante este tiempo pueden bloquearse durante un gran período de tiempo al azar. El hilo no puede durar más que el tiempo establecido por la variable de duración. ¿Cómo puedo hacerlo así después de la duración establecida por la duración, los hilos se detienen.

def main(): t1 = threading.Thread(target=thread1, args=1) t2 = threading.Thread(target=thread2, args=2) time.sleep(duration) #the threads must be terminated after this sleep


Esto funcionará si no estás bloqueando.

Si planeas dormir, es absolutamente imprescindible que uses el evento para dormir. Si aprovecha el evento para dormir, si alguien le dice que se detenga mientras "duerme", se despertará. Si usa time.sleep() su hilo solo se detendrá después de que se despierte.

def main(): t1_stop= threading.Event() t1 = threading.Thread(target=thread1, args=(1, t1_stop)) t2_stop = threading.Event() t2 = threading.Thread(target=thread2, args=(2, t2_stop)) time.sleep(duration) #stop the thread2 t2_stop.set() def thread1(arg1, stop_event): while(not stop_event.is_set()): #similar to time.sleep() stop_event.wait(time) pass def thread2(arg1, stop_event): while(not stop_event.is_set()): stop_event.wait(time) pass


Si desea que los subprocesos se detengan cuando su programa finalice (como implica su ejemplo), conviértalos en subprocesos de daemon .

Si quieres que tus hilos mueran por orden, entonces tienes que hacerlo a mano. Hay varios métodos, pero todos implican hacer una verificación en el ciclo de su hilo para ver si es el momento de salir (vea el ejemplo de Nix).