繁体   English   中英

Python多处理队列为空

[英]Python multiprocessing queue is empty

我有一个令人尴尬的并行代码,它创建一个数组列表,并且想对其进行并行化(这是我第一次使用python的多处理技术,因此我仍在掌握这些概念)。 runNramps(* args)返回五个数组t1,c1,e1,m1和d1。 我想在多个线程中运行它,并将所有作业的答案结合在一起。

这是我试图通过在多个进程中运行来并行化的代码。 我的作业似乎可以执行并正确关闭,但是队列为空,queue.get()不返回任何内容。 我想我没有将所有输出合并在一起的方法,但是我在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

我确定自己正在运行并结束进程,因此我有一个小错误/误解。

非常感谢您的帮助!

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

您可以查看“使用队列的加入过程”下的多处理准则 ,以更好地说明问题。

只需交换联接和Queue.get逻辑,一切就可以正常工作。

不过,我宁愿使用一群工人来解决您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM