相关疑难解决方法(0)

如何在创建matplotlib数字后释放内存

我有几个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)

python memory-leaks numpy matplotlib

58
推荐指数
1
解决办法
3万
查看次数

Matplotlib和Pyplot.close()没有释放内存? - 后端相关的Qt4Agg

编辑:如果我明确地将matplotlib的后端从'Qt4Agg'更改为'Agg',那么我能够运行我的代码而没有错误.我认为这是后端的一个错误?

我正在编写一些代码来自动处理相当大量的数据.代码首先解析我的数据文件并存储所有相关的位.然后,我有不同的功能来生成我需要的每个图形(总共大约有25个).但是,我一直遇到某种内存错误,我认为这是因为Matplotlib/PyPlot没有正确释放内存.

每个绘图函数都以pyplot.close(fig)命令结束,因为我只想保存图形而不立即查看它们,所以它们包含pyplot.show().

如果我在翻译中单独运行绘图功能,那么我不会遇到任何问题.但是,如果我创建一个单独调用每个绘图函数的函数,那么我会遇到"MemoryError:无法为路径分配内存".

有人遇到过这样的问题吗?在绘制循环时,似乎与Matplotlib内存不足有关,但pyplot.close()无法解决我的问题.

这是我的代码中典型的绘图函数:

def TypicalPlot(self, title=None, comment=False, save=False, show=True):

    if title is None:
        title = self.dat.title

    fig = plt.figure()
    host = SubplotHost(fig, 111)
    fig.add_subplot(host)
    par = host.twinx()
    host.set_xlabel("Time (hrs)")
    host.set_ylabel("Power (W)")
    par.set_ylabel("Temperature (C)")
    p1, = host.plot(self.dat.timebase1, self.dat.pwr, 'b,', label="Power",
                    markevery= self.skip)
    p2, = par.plot(self.dat.timebase2, self.dat.Temp1, 'r,', 
                   label="Temp 1", markevery= self.skip)
    p3, = par.plot(self.dat.timebase2, self.dat.Temp2, 'g,', 
                   label="Temp 2", markevery= self.skip)
    p4, = par.plot(self.dat.timebase2, self.dat.Temp3, 'm,', 
                   label="Temp 3", markevery= self.skip)
    host.axis["left"].label.set_color(p1.get_color())
    # …
Run Code Online (Sandbox Code Playgroud)

python memory backend matplotlib

39
推荐指数
1
解决办法
2559
查看次数

创建一个引用计数的数字

似乎在matplotlib中创建一个图形的标准方法并不像我在python中所期望的那样:默认情况下fig = matplotlib.figure(),在循环中调用将保留所有创建的数字,并最终耗尽内存.

相当 ,其处理的解决方法职位,但需要显式调用matplotlib.pyplot.close(fig)似乎有点hackish.我想要的是一个简单的方法来fig计算引用,所以我不必担心内存泄漏.有办法做到这一点吗?

python memory-management matplotlib

24
推荐指数
2
解决办法
7398
查看次数

是否有可能将数字附加到Matplotlib的PdfPages?

我想使用PdfPages将在脚本的不同部分创建的2个数字保存为PDF,是否可以将它们附加到pdf?

例:

fig = plt.figure()
ax = fig_zoom.add_subplot(111)
ax.plot(range(10), range(10), 'b')

with PdfPages(pdffilepath) as pdf:
    pdf.savefig(fig)

fig1 = plt.figure()
ax = fig_zoom.add_subplot(111)
ax.plot(range(10), range(2, 12), 'r')

with PdfPages(pdffilepath) as pdf:
    pdf.savefig(fig1)
Run Code Online (Sandbox Code Playgroud)

python matplotlib pdfpages

6
推荐指数
3
解决办法
5196
查看次数

如何清除 Matplotlib for python 中的缓存

我需要创建很多图形,然后savefig用来保存图形。

但是在大约280张图片之后,它抛出了异常 RuntimeError: Could not allocate memory for image

有没有像clear()Matplotlib那样的函数?

python matplotlib

2
推荐指数
1
解决办法
8910
查看次数