我在64位Xubuntu 14.04 LTS和Python 2.7.6上运行以下代码
import numpy
import multiprocessing
def f(i):
result = numpy.zeros((224, 244, 3), dtype='float32')
return result
if __name__ == '__main__':
print 'Start...'
for i in xrange(100):
print 'Attempt:', i
args = [0] * 1000
pool = multiprocessing.Pool(8)
v = pool.map(f, args)
print 'Pool done.'
import gc
gc.collect()
del v
v = None
print 'Clean done.'
令人惊讶的是,它在我的机器上消耗了所有16 Gb,只需几次迭代。它完全冻结了系统。据我所知 - 这不应该发生,因为“v”是本地资源,可以解除分配。
那么为什么会发生“内存泄漏”?
多处理版本为0.70a1,numpy - 1.10.4
答案 0 :(得分:0)
在清理部分调用pool.close()
足以修复内存泄漏,而无需明确使用垃圾收集器。至于它为什么会发生,我不知道,但它肯定取决于how the pool is implemented(很可能它在某处保留了结果的参考)