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