有没有办法根据python中另一个线程返回的值退出另一个线程?
Is there a way to exit the other thread based on the value returned from another thread in python?
我有三个线程:main
、t1
、t2
。 t1
和 t2
是从 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 !
希望这对您有所帮助且清晰。
我有三个线程:main
、t1
、t2
。 t1
和 t2
是从 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 !
希望这对您有所帮助且清晰。