Python循环内存泄漏

时间:2018-05-14 15:36:14

标签: python for-loop memory-leaks

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

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

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

1 个答案:

答案 0 :(得分:0)

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

如果创建一个零数组,请注意内存使用情况会发生什么:

data = np.zeros(1000000000)

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

data = np.ones(1000000000)

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