Python 2.7.6 和多处理"泄漏内存"



我正在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

在清理部分中调用pool.close()就足以修复内存泄漏,而无需显式地求助于垃圾收集器。至于为什么会发生这种情况,我不知道,但这肯定取决于池是如何实现的(很可能它在某个地方保留了对结果的引用)

最新更新