【发布时间】:2021-07-25 03:10:19
【问题描述】:
通过在 单个 Jupyter Notebook 单元格中运行仅以下代码,我在函数的内存中加载了 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 Notebook 然后将打印函数的输出。查看运行单元后消耗的内存,它如预期的那样位于 1GB。但是,如果我多次运行同一个单元,内存占用量每次增加 1GB,直到我的整个 RAM 被消耗,然后我的 Windows 操作系统使用页面文件交换来处理标记为已消耗的更多内存,这会破坏我的应用程序的性能。我已经尝试使用gc.collect() 释放内存,但无济于事。
我看到有人问过类似的问题,但我没有找到问题的答案。内存不在内部被重用,它只会增长!
【问题讨论】:
-
如果您在与
fun()调用相同的单元格中执行gc.collect() -
如果我在同一个单元格中使用
gc.collect(),在fun()调用之后内存不会泄漏并且垃圾收集器返回0,这意味着它没有收集任何东西。或者,如果我将调用包装成类似print(fun())或在fun()之后添加任何指令,则不再存在内存泄漏。但是我仍然不明白为什么它首先泄漏,除非我重新启动内核,否则我无法恢复初始内存丢失。
标签: python python-3.x memory-leaks jupyter-notebook