python - 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将我的计算结果存储在已经分配的内存中?
解决方案
实际上,内存使用量的增加是因为 numpy 优化了内存中零数组的存储。因此,当您填写大量零数组时,numpy 无法有效地存储它。
如果您创建一个零数组,请注意您的内存使用情况:
data = np.zeros(1000000000)
然后看看当你创建一个数组时会发生什么:
data = np.ones(1000000000)
您会看到内存使用量急剧增加。
推荐阅读
- windows - 批处理文件将文件复制到一个文件夹中
- javascript - Winston 仅记录 .info 错误,不会将错误记录到文件或 mongodb
- python - Python DataFrame 打印样式随机变化
- express - 在尝试将数据从服务器端保存到 MySql 数据库时,抛出 UnhandledPromiseRejectionWarning: TypeError:
- html - 为什么我的文字偏向一边而不是中心
- javascript - 无法从逻辑或 || 返回箭头函数
- reactjs - 将 React Native 与 Buildfire 一起使用
- arrays - 将多个一维数组添加到一个二维数组
- mongodb - 在 40GB mongodb bson 文件中搜索的最快方法是什么?
- python - AWS CDK Python - 如何正确引用使用自定义资源创建的托管区域