如何在python中使用具有队列的工作池? [重复]

问题描述 投票:1回答:1

这个问题在这里已有答案:

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

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

    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')

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

python-3.x python-multiprocessing
1个回答
0
投票

这是Sharing a result queue among several processes的副本

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

pool = mp.Pool(processes=10)
m = mp.Manager()
q = m.Queue()
© www.soinside.com 2019 - 2024. All rights reserved.