通过在单个Jupyter笔记本单元中运行仅以下代码,我将1GB的文件加载到函数的内存中,并在函数定义后返回结果:
import pickle
def fun():
with open('./data/input/train_test_clevr_pkls/train_clevr_1000.pkl', 'rb') as handle:
return pickle.load(handle)
fun()
然后,Jupyter笔记本将打印函数的输出。从我运行单元后消耗的内存来看,它的存储容量达到了预期的1GB。但是,如果我多次运行同一个单元,每次内存占用都会增加1GB,直到我的整个RAM被消耗,然后我的Windows操作系统使用页面文件交换来处理标记为被消耗的更多内存,这会破坏我的应用程序的性能。我已经尝试使用gc.collect()
来释放内存,但是没有用
我看到有人问我类似的问题,但我没有找到问题的答案。内存是而不是被内部重用,它只会增长
您之所以看到这一点,是因为Jupyter存储了对名为
Out
的名称的所有引用MRE(所有这些都在一个单元中)
在单元格中运行此命令时,Jupyter会将其保存到dict
Out
Out
的部分内容当您再次运行代码块时,它将该值存储到
Out
中的新键3
。每次运行单元格时,都会不断向Out
dict添加新的键值对现在,当您执行
print(...)
时,为什么它不会发生在这种情况下,Jupyter不会将结果保存到
Out
dict。无论您运行该单元格多少次,Out
dict将始终是{}
相关问题 更多 >
编程相关推荐