有没有办法根据python中另一个线程返回的值退出另一个线程?

Is there a way to exit the other thread based on the value returned from another thread in python?

我有三个线程:maint1t2t1t2 是从 main 产生的。 t2 中有一个 while 循环,其中正在进行一些处理。 t2 使用由 t1 设置的 bool 变量。我希望控件在 t1 将 bool 变量设置为 true 后立即退出 t2 中的 while 循环。

class main()
    # Initialise thread object
    start t1
    start t2
    t1.join
    t2.join

t1:

flag=False;
if (condition is true):
    flag = True
    q.put(flag)
else:
    q.put(flag)
    time.sleep(1)

t2:

while (not q.get()):
    # Logic
    return

我正在检查 t2 中的 q.get() 但这并没有解决问题,因为如果让我们说出 [= 的值,我希望控件跳过循环中的其余行当 t2 中的控制在 while 循环内时,t1 某处将 41=] 设置为真。

有办法实现吗?

您可以从线程中使用 Event Objects
您需要在 main 方法中设置一个事件对象并将其用作参数:

def main()
    # Initialise thread object
    flag = threading.Event()        
    start t1  # pass flag as arg
    start t2  # pass flag as arg
    t1.join
    t2.join

你的线程逻辑应该是这样的

t1

if (condition is true):
    flag.set()

t2

while (not flag.is_set()):
    # Logic
    return

这是另一个真实的非伪例子

import threading


def main():
    # Initialise thread object
    flag = threading.Event()
    for i in range(2):
        if i == 0:
            t1 = threading.Thread(target=t1_func, args=(flag,))
            t1.start()
        else:
            t2 = threading.Thread(target=t2_func, args=(flag,))
            t2.start()


def t1_func(flag):
    for i in range(100000000):
        if i == 100000000 - 1:
            flag.set()


def t2_func(flag):
    while not flag.is_set():
        print('not flag yet')
    print('GOT FLAG !')


if __name__ == '__main__':
    main()

not flag yet
not flag yet
not flag yet
GOT FLAG !

希望这对您有所帮助且清晰。