如何在 python 中使用带有队列的工作池?

How to use a Pool of Workers with a Queue in python?

我目前正在尝试使用多处理设置参数研究,但我不明白如何使用队列将结果返回到主进程。

有人可以帮忙告诉我,为什么我的例子不起作用吗?

    import numpy as np
    import multiprocessing as mp
    from queue import Empty


    def run(q1):

        q1.put({'val':np.random.random(), 'ErrFlag':False})


    if __name__ == '__main__':

        q = mp.Queue()

        pool = mp.Pool(processes = 10)

        results = []

        for i in range(50):
            pool.apply_async(run, (q,))

        pool.close()
        pool.join()

        while True:
            try:
                res = q.get(timeout = 1)

                results.append(res['val'])

            except Empty:
                break

        print(f'result: {repr(np.array(results))}\n')

执行此操作时,我只得到一个空数组。

这是 Sharing a result queue among several processes

的副本

您应该使用管理器让不同的工作人员可以访问您的队列:

pool = mp.Pool(processes=10)
m = mp.Manager()
q = m.Queue()