【问题标题】:Confusion on Python Memory ManagementPython内存管理的困惑
【发布时间】:2020-03-14 09:09:14
【问题描述】:

背景:有时,我在 Jupyter Notebook 上反复运行同一个单元格进行绘图,这会导致内核死机。我怀疑它与内存问题有关。所以我做了以下测试。

import gc
import numpy as np
import matplotlib.pyplot as plt

def my_func():
    x = np.arange(0, 10)
    plt.plot(x, x)
    plt.show()

collected = gc.collect()
print(f"Garbage collector: collected {collected} objects")

print("Creating cycles...")
my_func()

collected = gc.collect()

print(f"Garbage collector: collected {collected} objects")


在 Jupyter Notebook 上运行

Garbage collector: collected 51 objects
Creating cycles...
Garbage collector: collected 2250 objects

但是当我再次运行笔记本时(不重新启动内核),

Garbage collector: collected 2290 objects
Creating cycles...
Garbage collector: collected 0 objects


在 Python 解释器上运行

Garbage collector: collected 9 objects
Creating cycles...
Garbage collector: collected 0 objects


看起来当我在 Python Interpreter 上运行脚本时,图形对象在离开 my_func 后会自动释放。但 Jupyter Notebook 并非如此。谁能解释其中的区别?谢谢

【问题讨论】:

    标签: python jupyter-notebook garbage-collection


    【解决方案1】:

    jupyter notebook 它正在使用IPython Kernel,并且在运行单元后,在单元运行时构建的所有变量都保存在内存中,如果你想释放jupyter notebook 的内存,你可以重启内核


    我一直在 jupyter notebook 上使用您的示例进行测试,一次又一次地运行同一个单元格,但每次重新运行同一单元格后,我都没有看到您描述的行为:

    Garbage collector: collected 2252 objects
    

    【讨论】:

      猜你喜欢
      • 2016-09-12
      • 2012-03-04
      • 2017-07-29
      • 2014-11-06
      • 2012-05-24
      • 1970-01-01
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多