我有三个线程:main、t1、t2。t1和t2是从main衍生而来的。在while循环中,t2中正在进行一些处理。t2使用t1设置的bool变量。我希望控件在t2将bool变量设置为true后立即退出true循环。
class main()
# Initialise thread object
start t1
start t2
t1.join
t2.joint1:
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我正在检查q.get()在t2中,但这并不能解决问题,因为我希望控件跳过循环中的其余行,如果假设“标志”的值被t1设置为true时,t2中的控件在t2循环中。
有办法做到这一点吗?
发布于 2018-01-19 09:33:32
您可以从线程中使用事件对象。
您需要在主方法中设置一个事件对象,并将其用作参数:
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()还没有旗子 还没有旗子 还没有旗子 有旗子!
希望这是有帮助的和明确的。
https://stackoverflow.com/questions/48336715
复制相似问题