Aalok kapoor wrote:
> Hi all,
>
> I am using matplotlib-0.87.7, Basemap-0.9.3, Numpy-1.1 and agg backend.
> I am facing memory leak problems after running following script -
>
>
> import os, sys, time
> import cStringIO
> import Image
> import matplotlib
> matplotlib.use('Agg')
>
> import matplotlib.pylab as p
> import matplotlib.numerix as nx
> from matplotlib.toolkits.basemap import Basemap
>
> def get_image_bytes(width_fig, height_fig, str_img):
>     """Returns the bytes representing the image generated
>
>     The createImage method should be called before calling this method.
>
>     :Returns:
>         Byte data.
>     """
>     # Get the actual image data
>     f = cStringIO.StringIO()
>     dims = (width_fig, height_fig)
>     im = Image.fromstring("RGB", dims, str_img)
>     im.save(f, "JPEG")
>     return f.getvalue()
>
> def report_memory(i):
>     pid = os.getpid()
>     a2 = os.popen('ps -p %d -o rss,vsz,%%mem' % pid).readlines()
>     print i, '  ', a2[1],
>     return int(a2[1].split()[1])
>
>
>
> # take a memory snapshot on indStart and compare it with indEnd
> indStart, indEnd = 30, 150
> print '     rss   vsz    %mem'
> for i in range(indEnd):
>     p.figure(figsize=(float(640)/80.0,float(480)/80.0),
>              facecolor='w', edgecolor='w')
>     p.axes([0.0, 0.0, 1.0, 1.0])
>     map1 = Basemap(projection='cyl', lat_0=50, lon_0=-100,
>                     area_thresh=1000.)
>     # draw coastlines, country boundaries, fill continents.
>     map1.drawcoastlines(linewidth=.5)
>     map1.drawcountries()
>     map1.fillcontinents(color="#CEFFCE")
>     # draw the edge of the map projection region (the projection limb)
>     map1.drawmapboundary()
>     # compute the native map projection coordinates for cities.
>     lats, lons = ([18.728], [20.890])
>     x,y = map1(lons,lats)
>     # plot filled circles at the locations of the cities.
>     map1.plot(x,y,'bo')
>     canvas = p.get_current_fig_manager().canvas
>     agg = canvas.switch_backends \
>           (matplotlib.backends.backend_agg.FigureCanvasAgg)
>     agg.draw() # Takes ~.9 seconds
>     # get the image data
>     str_img = agg.tostring_rgb()
>     width_fig, height_fig = map(int, agg.figure.bbox.get_bounds()[2:])
>     p.cla()
>     p.close()
>     bytes = get_image_bytes(width_fig, height_fig, str_img)
>
>
>     val = report_memory(i)
>    # wait a few cycles for memory usage to stabilize
>     if i==indStart: start = val
>
> end = val
> print 'Average memory consumed per loop: %1.4fk bytes' % \
>       ((end-start)/float(indEnd-indStart))
>
>
>
>
> Here is the O/P
>
> $python memory_leak_map.py
>      rss    vsz    %mem
> 0    47272 50632  9.7
> 1    74412 77700 15.3
> 2    93960 97380 19.3
> 3    113308 116776 23.3
> 4    132824 136416 27.3
> 5    152352 155828 31.3
> 6    171860 175216 35.3
> 7    191372 194868 39.3
> 8    210872 214248 43.3
> 9    230336 233916 47.3
> 10    249732 253284 51.3
> 11    269252 272692 55.3
> 12    288680 292336 59.3
> 13    308108 311724 63.2
> 14    305160 331112 62.6
> 15    301096 350764 61.8
> 16    304884 370160 62.6
> 17    298276 389804 61.2
> 18    305876 409184 62.8
> 19    298316 428596 61.2
> 20    307856 448224 63.2
> 21    308004 467640 63.2
> 22    308844 487016 63.4
> 23    306260 506656 62.9
> 24    300612 526052 61.7
> Traceback (most recent call last):
>   File "memory_leak_map.py", line 41, in ?
>     area_thresh=1000.)
>   File 
> "/usr/local/lib/python2.4/site-packages/matplotlib/toolkits/basemap/basemap.py",
>  
> line 815, in __init__
>     self.riversegs = segments+segments2+segments3
> MemoryError
> Killed: 9
>
>
> Can someone please help me out solving this problem?
>
>
> Thanks
> -Aalok
>
Aaolk:  All your plots use the same map projection, yet you are 
initializing a new Basemap instance every time through the loop.  Try 
moving the line

    map1 = Basemap(projection='cyl', lat_0=50, lon_0=-100, 
area_thresh=1000.)

outside the loop.

-Jeff

-- 
Jeffrey S. Whitaker         Phone  : (303)497-6313
Meteorologist               FAX    : (303)497-6449
NOAA/OAR/PSD  R/PSD1        Email  : [EMAIL PROTECTED]
325 Broadway                Office : Skaggs Research Cntr 1D-124
Boulder, CO, USA 80303-3328 Web    : http://tinyurl.com/5telg


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to