Stopping a thread after a certain amount of time
我想在一定时间后终止一些线程。这些线程将运行一个无限的while循环,在这段时间内,它们可以在一个随机的、大量的时间内暂停。线程的持续时间不能超过duration变量设置的时间。如何在持续时间设置的长度之后使线程停止。
1 2 3 4 5 6 | 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 |
如果您不阻塞,这将工作。
如果你打算睡觉,你必须用这个活动来睡觉。如果你利用这个事件去睡觉,如果有人告诉你在"睡觉"的时候停下来,它就会醒来。如果使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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) |
如果您希望在程序退出时停止线程(如您的示例所暗示的那样),那么让它们成为守护进程线程。
如果您希望线程在命令下死掉,那么您必须手工完成。有各种方法,但都涉及到在线程的循环中执行一个检查,以查看是否该退出(参见nix的示例)。