gpt4 book ai didi

python - 使用 matplotlib 时,带有 Anaconda 5.1.0 或更高版本的 Jupyter-Notebook 中的内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:52 26 4
gpt4 key购买 nike

我将 Jupyter-notebook 与最新的 Anaconda (2018.12) 一起使用,我注意到它使用了大量内存(大约 6GB)来绘图并直接将约 2000 个数字(1920x1080)保存到 Ubuntu 18.04 中的 .png 文件中.

我尝试在我的 Mac 上用 Anaconda 4.4.0 重现这个问题,但问题没有发生。

后来我尝试在我的 Ubuntu 机器上安装几个不同版本的 Anaconda,并用更简单的代码成功重现了内存泄漏问题。

事实证明,Anaconda 5.0.0 是最后一个没有这种特殊内存泄漏问题的版本。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,1,101)
n = 0
dt = 0.01
w = 1

while n <= 1000:
y = np.sin(2*np.pi*x + w*n*dt)
plt.clf()
plt.title("T = %.02f s." %(n*dt))
plt.plot(x,y)
plt.savefig("dat/dat_%05d.png" % (n))
plt.close()
n = n+1

我正在使用 htop 来监控内存使用情况。

在 Anaconda 5.0.0 中,它显示我的 8GB RAM 机器的内存使用率恒定为 1.3%。

在 Anaconda 5.1.0 中,内存使用率从 2% 左右开始,并随着将图形保存到 .png 文件中而迅速增加,达到 16% 的内存使用率,即使在单元格执行完成后也保持不变。

我试过

import gc
gc.collect()

并且内存使用量减少了 12%。

当然,我所说的内存使用量是指那些特定 python 进程的内存使用量,而不是整个系统的内存使用量。

有人已经成功解决了最新 Anaconda 中包含的 jupyter-notebook 中的内存泄漏问题吗?

最佳答案

while 的每个循环中重置 y 变量是错误的形式,因为原始对象仍在内存中的某个地方,只是不再有对它的引用.您可以在每个 while 循环的末尾,在 n = n+1 语句之前使用 del y,但是这也不会从内存中释放它...它只是等待 Python 的垃圾收集到达它。可能添加该行可能会更快地释放内存。

我假设您已经看到了:https://www.quora.com/Why-doesnt-Python-release-the-memory-when-I-delete-a-large-object

由于垃圾收集问题,以较小的 block 创建绘图可能会更快。

关于python - 使用 matplotlib 时,带有 Anaconda 5.1.0 或更高版本的 Jupyter-Notebook 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54765105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com