【发布时间】:2018-12-10 04:46:37
【问题描述】:
这里我有MazeRunner 类,它将self.boxes 的所有元素放入队列并在它们上运行线程,直到所有队列变为空q.empty()。
这里的问题是我如何真正确定我的程序是否已完成对
self.boxes队列中的所有元素执行线程并返回True。
这看起来很有挑战性,因为 our threads 处于 while 循环中,它根据我们定义的 self.boxes 长度和 self.threads 保持更改。
我已经尝试将所有线程都放在列表中并t.join 全部。但不是运气。有什么帮助吗?
import threading,queue,time
class MazeRunner:
def __init__(self):
self.q = queue.Queue()
self.boxes = [1,2,3,4,5,6,7] ## `7` elements of list
self.threads = 5
for i in self.boxes:
self.q.put(i) ### ADDING Every element of list to queue
for j in range(self.threads): ### for i in range(5) threads
t = threading.Thread(target=self.ProcessQueue)
t.start() ### Started `5` threads on `7` elements
def ProcessQueue(self):
while not self.q.empty():
each_element = self.q.get()
self.SleepFunction(each_element)
self.q.task_done()
def SleepFunction(self,each_element):
print("STARTING : ",each_element)
time.sleep(10)
print("DONE : ",each_element)
lets_try = MazeRunner()
if lets_try == True:
print("All Threads Done on Elements")
【问题讨论】:
标签: python python-3.x multithreading python-2.7 python-multithreading