我在一个项目中使用的线程是这样的。
thread1 = Thread(target=function, args=('x','y',1,2))
thread2 = Thread(target=function, args=('a','b',1,2))
thread1.start()
thread2.start()
一切正常,但我想在我的代码中增加一个选项。为了杀死我的线程,我目前在我的目标函数中使用While X==True,所以当我想杀死一个线程时,我必须传递While==False。所以当我想杀死一个线程时,我必须传递While==False.问题是这样做会杀死所有使用这个函数的线程。
所以,如果线程1和线程2同时运行并使用同一个目标函数,我如何才能只杀死线程1而不对线程2做同样的事情呢?
谢谢您
下面是一个简化的例子,说明我的实际操作。
def test_thread(freq):
starttime=time.time()
while RUN==True:
try:
if 1==1:
print('1')
sleep(freq - ((time.time() - starttime) % freq))
except Exception as Ex:
print(Ex)
pass
RUN = True
run_test = Thread(target=test_thread, args=(20))
run_test.start()
你可以给两个线程中的每个线程传递一个不同的、可变的对象作为参数。
class Stopper:
def __init__(self):
self.flag = True
def ok_to_keep_going(self):
return self.flag
def stop_now(self):
self.flag = False
def test_thread(freq, stopper):
...
while stopper.ok_to_keep_going():
...
if __name__ == '__main__':
t1_stopper = Stopper()
t2_stopper = Stopper()
t1 = Thread(target=test_thread, args=(T1_FREQ, t1_stopper))
t2 = Thread(target=test_thread, args=(T2_FREQ, t2_stopper))
t1.start()
t2.start()
现在你可以通过调用 t1_stopper.stop_now()
,或通过调用停止线程2 t2_stopper.stop_now()
或者,用更少的代码行。
def test_thread(freq, stopper):
...
while stopper[0]:
...
if __name__ == '__main__':
t1_stopper = [True]
t2_stopper = [True]
t1 = Thread(target=test_thread, args=(T1_FREQ, t1_stopper))
t2 = Thread(target=test_thread, args=(T2_FREQ, t2_stopper))
t1.start()
t2.start()
现在你停止线程 t1
通过设置 t1_stopper[0]=False
.