Python Jupyter笔记本中基于循环的Seaborn绘图的内存泄漏

Python Jupyter笔记本中基于循环的Seaborn绘图的内存泄漏,python,plot,memory-leaks,jupyter-notebook,seaborn,Python,Plot,Memory Leaks,Jupyter Notebook,Seaborn,我在管理Jupyter笔记本中调用的函数时遇到一些问题。此函数包含一个计算,用于进行一些成对数据分析。在迭代处理过程中,循环生成一些绘图并将其写入磁盘 然而,即使在关闭绘图之后,我似乎也在向RAM中累积大约40MB/s的内存 以下是以该速率泄漏的简化示例: for x in combinations(range(m.num_parameters + 1), 2): _plot = sns.pairplot(data=m_df, x_vars=[x[0]], y_vars=[x[1]-1

我在管理Jupyter笔记本中调用的函数时遇到一些问题。此函数包含一个计算,用于进行一些成对数据分析。在迭代处理过程中,循环生成一些绘图并将其写入磁盘

然而,即使在关闭绘图之后,我似乎也在向RAM中累积大约40MB/s的内存

以下是以该速率泄漏的简化示例:

for x in combinations(range(m.num_parameters + 1), 2):

    _plot = sns.pairplot(data=m_df, x_vars=[x[0]], y_vars=[x[1]-1], 
                         size=5)
    _plot.savefig(directory+'{}_{}'.format([x[0]], [x[1]-1]))
    sns.plt.clf()
    sns.plt.close()

    # I can even run the following to no avail:
    del(_plot)
作为参考,我的数据结构如下:

m_df = pd.DataFrame.from_dict(m.parameters)
m_df.columns = m.parameters.keys()
我已经在Jupyter中使用各种方法(如mprun、pympler等)进行了大量内存分析。关键提示出现在我简单地注释了绘图例程时,就像上面示例中的一样,并注意到我不再填充RAM

需要澄清的是,由于上面的代码片段代表导入并将数据提供给处理的模块,因此笔记本中没有呈现这些绘图

我还发现,在例程完成后(或键盘中断后),我可以通过手动运行笔记本中的垃圾收集来释放内存


有人知道为什么这些绘图对象看起来没有正确关闭吗?

我注意到了同样的事情