我已经将一段代码缩小到以下最小(工作?)示例:
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
个对象,我怎样才能在不重新分配新内存的情况下每次都这样做?
答案 0 :(得分:5)
您在每次循环迭代时都在创建一个新的多处理池 - 您是否只想要一个池来处理您的处理作业?
import multiprocessing
def f(x): return x**2
P = multiprocessing.Pool()
for n in xrange(2000):
sol = list(P.imap(f, range(20)))