首页 > 解决方案 > Python循环内存泄漏

问题描述

我正在做一个更大的项目,我看到内存使用量持续增加。该代码类似于我在下面截取的演示 - 只是没有随机数和更有用的计算......但效果是一样的。运行这个我看到内存使用量增加

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

我正在使用 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将我的计算结果存储在已经分配的内存中?

标签: pythonfor-loopmemory-leaks

解决方案


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

如果您创建一个零数组,请注意您的内存使用情况:

data = np.zeros(1000000000)

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

data = np.ones(1000000000)

您会看到内存使用量急剧增加。


推荐阅读