Python 多处理队列为空

Python multiprocessing queue is empty

我有一个创建数组列表的令人尴尬的并行代码,我想将它并行化(这是我第一次使用 python 的多处理,所以我仍在掌握这些概念)。 运行Nramps(*args) returns 五个数组,t1、c1、e1、m1 和 d1。我想在多个线程中 运行 并将所有作业的答案连接在一起。

这是我试图通过 运行 在多个进程中并行化的代码。我的作业似乎可以执行并正确关闭,但是队列是空的并且 queue.get() 没有 return 任何东西。我想我错过了将所有输出合并在一起的方法,但我在 SO/google.

上找不到任何好的例子

这是我的代码的线程版本(我想对之前的函数做最少的改动,只是多次调用它,将结果连接到一个数组中)。

def runPramps(numramps,rmpslope,nframes,cosmag=0,method='2pt',thresh=1.0):

    output = mp.Queue()
    processes = [mp.Process(target=runNramps, args=(numramps,rmpslope,nframes,cosmag,method,thresh)) for x in range(4)] #4 processes for example

    for p in processes:
            p.start()
            print "started", p

    for p in processes:
            p.join()
            print 'ended',p


    results = output.get(False) #it hangs here
    return results

我觉得我有一个小的 error/misunderstanding,因为我已经确定进程正在 运行 正在结束。

非常感谢您的帮助!

问题是由于您在清空队列之前加入了进程。

您可以查看 "Joining processes that use queues" 下的 multiprocessing guidelines 以获得对问题的更好解释。

只需交换联接和 Queue.get 逻辑,一切都会正常。

尽管如此,我宁愿使用 Pool of workers 来解决您的问题。