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 来解决您的问题。
我有一个创建数组列表的令人尴尬的并行代码,我想将它并行化(这是我第一次使用 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 来解决您的问题。