2

我已将一段代码缩小到以下最小(工作?)示例:

import multiprocessing

def f(x): return x**2

for n in xrange(2000):
    P = multiprocessing.Pool()
    sol = list(P.imap(f, range(20)))

当我在我的计算机(Ubuntu 12.04,8 核)上运行它时,python 继续消耗所有可用内存,最终由于交换无响应而挂起系统。我听说 Python 在完成之前不会释放内存,但我认为这个程序应该消耗超过 8Gb 的 RAM 有点愚蠢。如果我想multiprocessing.Pool一遍又一遍地创建对象,如何在不每次都重新分配新内存的情况下做到这一点?

4

1 回答 1

6

您在每次循环迭代时都创建一个新的多处理池 - 您不只想要一个池来提供您的处理作业吗?

import multiprocessing

def f(x): return x**2

P = multiprocessing.Pool()
for n in xrange(2000):
    sol = list(P.imap(f, range(20)))
于 2013-07-03T21:31:43.503 回答