gpt4 book ai didi

python - 如何确定带有队列的 Python 线程是否完成任务?

转载 作者:太空宇宙 更新时间:2023-11-04 00:07:15 24 4
gpt4 key购买 nike

这里我有 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 & return True.

这看起来很有挑战性,因为 我们的线程 处于 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")

最佳答案

您需要等到所有线程都完成调用 Thread.join :

操作方法:

  • 用类常量替换您的 self.threads = 5 表达式:

    THREAD_NUM = 5
  • 将附加属性 threads(用于线程列表)放入您的 __init__ 方法中:

    ...
    self.threads = []
  • 将每个创建的线程放入threads列表中:

    for j in range(self.THREAD_NUM):
    t = threading.Thread(target=self.ProcessQueue)
    self.threads.append(t)
    t.start()
  • 定义方法,如 check_completed 以确保所有线程都已终止(完成):

    ....

    def check_completed(self):
    for t in self.threads:
    t.join()
    return True

您需要检查“全部完成”的方式:

m_runner = MazeRunner()
if m_runner.check_completed():
print("All Threads Done on Elements")

关于python - 如何确定带有队列的 Python 线程是否完成任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53696109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com