Jupyter Notebook 内存使用率最高,直到出现错误

Warlax56

我正在尝试运行一些迭代来填充一个大列表,直到我的内存使用率达到 60%,使用该列表,删除该列表,然后再次运行它。像这样的东西:

while True:
    ls = []
    usage = psutil.virtual_memory().percent
    print(usage)
    if usage  < 60:
         ls.append(bigThing)
    else:
         break
    use_list(ls)

    #seems redundant, but did this just in case
    del ls

不管我做了什么,似乎内存使用量都收敛到了 60 左右。我第一次运行单元时,它可能看起来像这样:

30
35
40
50
62

在接下来的几次我运行该单元格时,它看起来像这样,在达到阈值之前,似乎有轻微的减少保持静态

58.7
58.7
58.7
58.7
58.7
60

然后它会直接进入60.1,例如,从不迭代。

如果我运行任何有错误的代码,例如ls连续删除两次,它似乎重置了内存使用量,它会回落到 30,我可以再次迭代。但是,如果我在一个try块中执行此操作,它将保持不变。这让我觉得有一些移动上限会在出现错误时重置,但这就是我在这里的原因:我到底如何防止它像这样“上限”?

Warlax56

基于这个问题,python垃圾收集器不会立即自动释放未引用的内存。这可能取决于您的用例,但对我来说,使用import gcgc.collect()在某些方面手动命令垃圾收集器清理数据,效果很好。所以我当前的程序看起来像这样:

while True:
   ls = make_list_to_mem_thresh()
   use_list(ls)
   del ls
   gc.collect()

很可能,当一个单元发生故障时,它会触发垃圾收集器。如果是这样,那就可以解释问题中描述的“封顶”现象。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章