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

Reply via email to