如何停止特定的线程?
How to stop a specific Thread among others?
我正在为一个如下所示的项目使用线程:
thread1 = Thread(target=function, args=('x','y',1,2))
thread2 = 线程(target=function, args=('a','b',1,2))
thread1.start()
thread2.start()
一切正常,但我想在我的代码中添加一个选项。为了杀死我的线程,我目前在我的目标函数中使用 While X==True 。所以当我想杀死一个线程时,我必须通过 While==False。
问题是这样做会杀死所有使用此功能的线程。
那么,如果两者 运行 在一起并使用相同的目标函数,我如何才能只杀死线程 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()
停止线程 1,或通过调用 t2_stopper.stop_now()
停止线程 2
或者,为了减少代码行数:
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_stopper[0]=False
.
停止线程 t1
我正在为一个如下所示的项目使用线程:
thread1 = Thread(target=function, args=('x','y',1,2))
thread2 = 线程(target=function, args=('a','b',1,2))
thread1.start()
thread2.start()
一切正常,但我想在我的代码中添加一个选项。为了杀死我的线程,我目前在我的目标函数中使用 While X==True 。所以当我想杀死一个线程时,我必须通过 While==False。 问题是这样做会杀死所有使用此功能的线程。
那么,如果两者 运行 在一起并使用相同的目标函数,我如何才能只杀死线程 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()
停止线程 1,或通过调用 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_stopper[0]=False
.
t1