繁体   English   中英

Python循环内存泄漏

[英]Python Loop memory leak

我正在研究更大的项目,并且在那里看到内存使用量连续增加。 该代码类似于下面的示例演示-只是没有随机数和更有用的计算...但是效果是相同的。 运行这个我看到内存使用率增加

为什么会发生这种情况,我该如何预防呢? 谢谢你的每一个有用的答案:)

我正在使用python 3

n= 10000000
indat = np.random.random(n*4)
data = np.zeros(n*3)

d = [0,0,0,0]
for i in range(n):  
    d = indat[i*4:i*4+4]
    data[i*3]  = np.sqrt(np.abs(d[0]+d[1]*d[3]))
    data[i*3+1]= np.sqrt(np.abs(d[3]+d[2]*d[3]))
    data[i*3+2]= np.sqrt(np.abs(d[2]+d[1]*d[3]))

编辑:我尝试了更多的东西:

1:按预期方式工作-不会增加内存

for i in range(n):  
    print(i, end="\r")

2:但是有了这个增加。

for i in range(n):  
    data[i] = indat[i]**2

因此,至少这个简单的副本无法按我期望的那样工作...我如何获取python将计算结果存储在已分配的内存中?

实际上,内存使用率的增加是因为numpy优化了零数组在内存中的存储。 因此,当您填写大量的零数组时,numpy无法有效地存储它。

如果创建零数组,请注意内存使用情况如何:

data = np.zeros(1000000000)

然后看看创建一个数组时会发生什么:

data = np.ones(1000000000)

您会发现内存使用量急剧增加。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM