Здесь у меня есть 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")