Je cherche à terminer certains threads après un certain temps. Ces threads exécuteront une boucle while infinie et pendant ce temps, ils peuvent caler pendant une période aléatoire importante. Le thread ne peut pas durer plus longtemps que le temps défini par la variable de durée. Comment puis-je faire en sorte qu'après la longueur définie par la durée, les threads s'arrêtent.
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
Cela fonctionnera si vous ne bloquez pas.
Si vous prévoyez de dormir, il est impératif que vous utilisiez l'événement pour dormir. Si vous tirez parti de l'événement pour dormir, si quelqu'un vous dit d'arrêter pendant le "sommeil", il se réveillera. Si vous utilisez time.sleep()
votre thread ne s'arrêtera qu'après réveil.
import threading
import time
duration = 2
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)
# stops thread t2
t2_stop.set()
def thread1(arg1, stop_event):
while not stop_event.is_set():
stop_event.wait(timeout=5)
def thread2(arg1, stop_event):
while not stop_event.is_set():
stop_event.wait(timeout=5)
Si vous voulez que les threads s'arrêtent à la fin de votre programme (comme l'indique votre exemple), faites-les threads démon .
Si vous voulez que vos threads meurent sur commande, vous devez le faire à la main. Il existe différentes méthodes, mais toutes impliquent de vérifier la boucle de votre thread pour voir s'il est temps de quitter (voir l'exemple de Nix).