我正在尝试制作一个多线程python程序,该程序不断循环遍历队列对象,直到满足条件为止。我有一个问题,另一个问题。问题是,应满足条件后,某些线程仍在运行。这是我初始化线程的方法:
for i in range(0, number_of_threads):
print("Created thread: "+ str(i))
t = threading.Thread(target=loopThrough)
#t.daemon = True
t.start()
threads[i] = t
time.sleep(1)
这有效,并且允许所有线程调用该函数。这是功能loopThrough:
def loopThrough():
global found
global word_queue
while not found:
if word_queue.empty():
word_queue = buildQ()
print("Built queue because it was empty")
word = word_queue.get()
if word == "happy":
check(word)
检查功能(在loopThrough之前定义)
def check(word):
global found
found = True
print(len(word))
这是一个简化,因为实际的critera / etc既冗长又冗长。这是我的问题。当我调用check函数时,我将found标志设置为true,因此它不再循环。但是,其他线程仍然循环。我理想地要做的是杀死每个线程,并使用主线程调用check函数。
最后,我还有其他担忧。我想知道如何制作一个队列对象,该对象仅使用刚得到的对象并将其移动到队列的末尾。我认为建立这样的队列效率不高。