簡體   English   中英

Python 2.7.6和多處理“泄漏內存”

[英]Python 2.7.6 and multiprocessing “leaks memory”

我在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()足以修復內存泄漏,而無需顯式訴諸垃圾收集器。 至於為什么會發生,我不知道,但是肯定取決於池的實現方式 (很可能它會將結果引用保存在某個地方)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM