我有一个脚本遵循此示例中的相同逻辑。 基本上我将项目插入到全局队列中,并使用while循环生成线程,该循环从队列和调用task_done获取和。
如果我的while循环检查队列是否为空,我可以让线程加入,但我想尝试合并一个标志,我可以自己设置退出循环。当我尝试这样做时,加入线程永远阻止。
以下是不加入线程的非工作样本:
import threading
import queue
class Mythread(threading.Thread):
def __init__(self):
super().__init__()
self.signal = False
def run(self):
global queue
while not self.signal:
item = q.get()
print(item)
q.task_done()
def stop(self):
self.signal = True
q = queue.Queue
for i in range(5000):
q.put(i)
threads = []
for i in range(2):
t = Mythread()
threads.append(t)
for t in threads:
t.start()
q.join()
for t in threads:
print(t.signal) <---- False
t.stop()
print(t.signal) <---- True
t.join() <---- Blocks forever
这是使用队列空
工作的那个import threading
import queue
class Mythread(threading.Thread):
def __init__(self):
super().__init__()
def run(self):
global queue
while not q.empty():
item = q.get()
print(item)
q.task_done()
q = queue.Queue
for i in range(5000):
q.put(i)
threads = []
for i in range(2):
t = Mythread()
threads.append(t)
for t in threads:
t.start()
q.join()
for t in threads:
t.join() <---- Works fine
print(t.is_alive()) <--- returns False
有什么想法吗?
答案 0 :(得分:-1)
q.get阻止所以它不会达到你的状态