如何停止特定的线程?

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