这里我有一个MazeRunner
类,它将self.boxes
的所有元素放在队列中,并在它们上面运行线程,直到所有队列都变为空q.empty()
。你知道吗
Here problem is how do i actually identify if my program is done performing threads on all elements which are in queue of
self.boxes
& returnTrue
.
它看起来很有挑战性,因为our threads
在while循环中,它根据我们定义的self.boxes
长度保持变化。
我试着把所有的线程都放在列表中,然后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")
您需要等到所有线程都调用完^{} :
方法:
将
self.threads = 5
表达式替换为类常量:将附加属性
threads
(用于线程列表)放入__init__
方法中:将每个创建的线程放入
threads
列表:定义类似
check_completed
的方法以确保终止所有线程(完成):检查“全部完成”的方法:
相关问题 更多 >
编程相关推荐