Now it works like charm. Thank you for quick answer. Stano.
On Fri, Mar 20, 2009 at 7:10 PM, Eric Firing <efir...@hawaii.edu> wrote: > Stano Paška wrote: >> >> Hi, >> I am using matplotlib first time and I am wonder how to free resources >> >> I have this script >> >> # coding: utf-8 >> >> import matplotlib >> matplotlib.use('Agg') >> >> import pylab >> >> class Graph: >> >> def __init__(self): >> # sirka stlpcov >> self.width = 0.5 >> self.font = {'fontname':'Tahoma', 'fontsize':10} >> >> def setTitle(self, title): >> """Nastavi nadpis grafu >> """ >> self.title = title >> >> def setXLabel(self, label): >> self.x_label = label >> >> def setYLabel(self, label): >> self.y_label = label >> >> def setYValues(self, values): >> """Nastavi y-ove hodnoty >> """ >> self.y_values = values >> # vypocitame lave spodne rohy stlpcov >> self.x_values = [x + self.width / 2 for x in >> range(len(self.y_values))] >> # vypocitame stred stlpcov (znacky na x-ovej osi) >> self.x_ticks = [x + self.width for x in range(len(self.y_values))] >> >> def setXTickLabels(self, labels): >> """Nastavi popisky pre ciarky na x-ovej osi >> """ >> self.x_ticksLabels = labels >> >> def makeGraph(self): >> self.fig = pylab.figure() >> self.fig.set_dpi(72) >> self.fig.set_figheight(3) >> self.fig.set_figwidth(5) >> >> self.fig.subplots_adjust(bottom=0.15) >> >> self.ax = self.fig.add_subplot(111) >> >> self.ax.bar(left=self.x_values, height=self.y_values, >> width=self.width, color='#f00000') >> self.ax.set_xticks(self.x_ticks) >> self.ax.set_xticklabels(self.x_ticksLabels) >> >> self.ax.set_xlabel(self.x_label, **self.font) >> self.ax.set_ylabel(self.y_label, **self.font) >> self.ax.set_title(self.title, **self.font) >> >> def saveGraph(self, path): >> self.fig.savefig(path, format='png') >> >> def __del__(self): >> self.fig.delaxes(self.ax) >> del self.fig >> del self.ax >> >> if __name__ == '__main__': >> import random >> import gc >> for i in range(5000): >> g = Graph() >> g.setTitle(u'Spotreba za rok 2008 podľa ATC skupín') >> g.setXLabel(u'ATC skupiny') >> g.setYLabel(u'Spotreba v EUR') >> g.setYValues([random.randint(0, x) for x in range(20)]) >> g.setXTickLabels([chr(random.randint(65, 90)) for x in range(20)]) >> g.makeGraph() >> g.saveGraph('grafy/' + str(i) + '.png') >> del g >> print gc.get_count() >> gc.collect() >> print gc.get_count() >> >> When I used TkAgg, it crashes after 190 images (Fail to create pixmap >> with Tk_GetPixmap in ImgPhotoInstanceSetSize. tried to delete photo >> image when instances still exist). >> When I switch to WX, it crashes after 400 images. >> And Agg crashes when pagefile reaches 1.5x ram (cca 2000 images). >> >> It is possible somehow free resources in matplotlib? > > You need to close the figure. Try putting > pylab.close(self.fig) at the start of your __del__ method. In fact, I doubt > you need to explicitly del anything in that method--you just need to close > the figure so that pylab will release its references related to that figure. > > There may be more things you need to change, but closing the figure is > certainly going to be a big one. > > Eric > >> >> I use python 2.5.4, wx 2.8.9.2, numpy 1.3.0b1 on win XP >> >> Thanks for answers. >> >> Stano. >> >> >> ------------------------------------------------------------------------------ >> Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are >> powering Web 2.0 with engaging, cross-platform capabilities. Quickly and >> easily build your RIAs with Flex Builder, the Eclipse(TM)based development >> software that enables intelligent coding and step-through debugging. >> Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com >> _______________________________________________ >> Matplotlib-users mailing list >> Matplotlib-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > ------------------------------------------------------------------------------ Apps built with the Adobe(R) Flex(R) framework and Flex Builder(TM) are powering Web 2.0 with engaging, cross-platform capabilities. Quickly and easily build your RIAs with Flex Builder, the Eclipse(TM)based development software that enables intelligent coding and step-through debugging. Download the free 60 day trial. http://p.sf.net/sfu/www-adobe-com _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users