【发布时间】:2019-08-01 03:42:29
【问题描述】:
这是我的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 增加到1.80G/7.76G,然后到1.81G/7.76G 等等直到-循环结束。
如何修改代码以使其在不持续消耗更多内存的情况下继续运行?
【问题讨论】:
-
在这里使用
del完全没有意义,gc也是如此。这些都是局部变量,没有引用循环供gc处理。 -
实际上,这是 Python 2 吗?
-
是的,
python -V显示它是 python 2.7.12 -
Python2 没有垃圾回收??
-
还在等待答复!
标签: python memory-management garbage-collection