python - python代码仍在运行时如何释放内存?
问题描述
这是我的code.py
。
import numpy as np
import gc
def main():
var_1, var_2, var_3 = np.random.normal(0, 1, (1, 3))[0]
var_4, var_5, var_6 = np.random.normal(0, 1, (1, 3))[0]
var_7, var_8, var_9 = np.random.normal(0, 1, (1, 3))[0]
var_10, var_11, var_12 = np.random.normal(0, 1, (1, 3))[0]
List = [var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12]
with open('record.csv','a') as f:
for i in List:
f.write('{},'.format(str(i)))
f.write('\n')
del var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11, var_12
del f, List
gc.collect()
# This code is just for demonstration. In actual
# situation, `data` is necessary for main(). So don't use `del data`.
data = np.random.normal(0, 1, (1000, 3))
total = 100*100*100
for k in range(total):
print(k+1, total)
main()
从理论上讲,上面的代码应该只使用固定数量的内存,因为我已经删除了所有变量并清除了所有垃圾。但是,当我python code.py
在一个终端中运行它并通过另一个终端观察内存使用情况htop
时,内存使用情况不断增加,从1.79G/7.76G
to 1.80G/7.76G
,然后 to1.81G/7.76G
等等,直到 for 循环结束。
如何修改代码以使其继续运行而不会持续消耗更多内存?
解决方案
GC 不知道您的意图。操作系统一直在为 Python 进程分配内存,那么为什么还要清理垃圾呢?您需要以某种方式限制 Python 进程,让它知道可用的内存量。
看起来 Python 没有提供限制堆大小的方法。所以使用或操作系统特性来限制进程内存占用(即 ulimit 用于 linux 和 macos)。有关更多详细信息,请参阅此问题。
推荐阅读
- reactjs - 如何在反应中添加搜索组件?
- php - Laravel:无法捕获 Carbon 抛出的异常
- ruby - 在 ruby on rails 中验证 excel 表
- database - 在 oracle 中插入查询显示错误缺少表达式
- reactjs - 使用对象实例作为 React 列表中的键
- amazon-web-services - 使用 AWS API Gateway + Lambda/ECS 开发的微服务应该怎么讲?
- swift - 如何在 swift 4 中为循环编写这个
- jquery - 如何将从ajax调用返回的数据附加到html表?
- android - kotline 调试模式,变量总是显示采集数据
- angular - Angular 6 - 当父组件获取其子组件的数据时显示加载消息