[英]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.