Python 2.7.6和多处理“泄漏内存”

时间:2016-04-18 14:34:53

标签: python memory-leaks multiprocessing

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

1 个答案:

答案 0 :(得分:0)

在清理部分调用pool.close()足以修复内存泄漏,而无需明确使用垃圾收集器。至于它为什么会发生,我不知道,但它肯定取决于how the pool is implemented(很可能它在某处保留了结果的参考)