我想在一段时间后终止一些线程。这些线程将运行无限循环,在此期间它们可以随机停留大量时间。线程的持续时间不能超过持续时间变量设置的时间。 如何在持续时间设置的长度之后,线程停止。
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
答案 0 :(得分:102)
如果您没有阻止 ,这将有效。
如果您正在计划睡眠,那么您必须使用该事件来进行睡眠。如果你利用这个事件来睡觉,如果有人告诉你在“睡觉”时停下来,它就会醒来。如果你使用time.sleep()
,你的线程只会在唤醒之后停止。
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)
答案 1 :(得分:10)
如果您希望线程在程序退出时停止(如您的示例所示),请将它们设为daemon threads。
如果你希望线程在命令中死亡,那么你必须手动完成。有各种方法,但都涉及检查线程的循环以查看是否有时间退出(参见Nix的示例)。
答案 2 :(得分:0)
如果要使用课程:
from datetime import datetime,timedelta
class MyThread():
def __init__(self, name, timeLimit):
self.name = name
self.timeLimit = timeLimit
def run(self):
# get the start time
startTime = datetime.now()
while True:
# stop if the time limit is reached :
if((datetime.now()-startTime)>self.timeLimit):
break
print('A')
mt = MyThread('aThread',timedelta(microseconds=20000))
mt.run()