【发布时间】: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