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?

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

Reply via email to