【发布时间】:2012-11-18 22:24:55
【问题描述】:
我在我的项目中使用多处理。我有一个工作函数,它将结果放入队列中。一切正常。但是随着 x 的大小增加(在我的情况下 x 是一个数组),出现了问题。这是我的代码的简化版本:
def do_work(queue, x):
result = heavy_computation_function(x)
queue.put(result) # PROBLEM HERE
def parallel_something():
queue = Queue()
procs = [Process(target=do_work, args=i) for i in xrange(20)]
for p in procs: p.start()
for p in procs: p.join()
results = []
while not queue.empty():
results.append(queue.get)
return results
我在系统监视器中看到 python 进程正在工作,但随后发生了一些事情,所有进程都在运行但什么也没做。这是我输入 ctrl-D 时得到的。
pid, sts = os.waitpid(self.pid, flag)
KeyboardInterrupt
我做了一些测试。实际上,问题似乎在于将结果放入队列中,如果我不将结果放入队列中一切正常,那么就没有任何目的了。
【问题讨论】:
-
您似乎永远不会将队列对象传递给新进程。另外
args的Process应该是tuple。尝试将其更改为args=(queue, i)。您的queue.get还需要一些括号,以便它变为queue.get()。
标签: python queue multiprocessing