在我创建许多数字的脚本中fix, ax = plt.subplots(...),我收到警告RuntimeWarning:已打开超过20个数字.通过pyplot接口(matplotlib.pyplot.figure)创建的数字将保留,直到明确关闭,并可能消耗太多内存.
但是,我不明白为什么我得到这个警告,因为保存图后fig.savefig(...),我删除它fig.clear(); del fig.我的代码中没有任何一点,我一次打开多个数字.尽管如此,我还是得到了关于太多公开数字的警告.这是什么意思/如何避免收到警告?
我有几个matlpotlib函数卷入了一些django-celery任务.
每次调用任务时,RAM都专用于python.不久之后,python占用了所有的RAM.
问题:我该如何释放这个记忆?
更新2 - 第二个解决方案:
我问过类似的问题,特别是有关内存锁定matplotlib错误的时候,但是我有一个很好的回答这个问题.clf(),.close()以及gc.collect()如果使用多进程运行在单独的进程中绘图功能,其内存会自动释放不需要一旦过程结束.
Matplotlib错误导致内存泄漏.我怎样才能释放那段记忆?
更新 - 解决方案:
这些stackoverflow帖子建议我可以使用以下命令释放matplotlib对象使用的内存:
.clf():在循环中绘图时,Matplotlib内存不足
.close():Python matplotlib:指定图形大小时未释放内存
import gc
gc.collect()
Run Code Online (Sandbox Code Playgroud)
以下是我用来测试解决方案的示例:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
from pylab import import figure, savefig
import numpy as np
import gc
a = np.arange(1000000)
b = np.random.randn(1000000)
fig = plt.figure(num=1, dpi=100, facecolor='w', edgecolor='w')
fig.set_size_inches(10,7)
ax = fig.add_subplot(111)
ax.plot(a, b)
fig.clf()
plt.close()
del a, b
gc.collect()
Run Code Online (Sandbox Code Playgroud)