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).