Hi Michael, Thanks for your explanation. It turns out that it is a combination of (1) and (3). I hadn't thought about (1) and I hadn't done enough playing to see the python interpreter releasing blocks of memory. As you suggested, the "solution" is to limit the iPython cache by using the iPython -cs option.
thanks for your help, Gary Michael Droettboom wrote: > There are at least three possible causes of what you're seeing here: > > 1) ipython stores references to all results in the console. (ipython > maintains a history of results so they can easily be accessed later). I > don't recall the details, but it may be possible to turn this feature > off or limit the number of objects stored. > > 2) matplotlib stores references to all figures until they are explicitly > closed with pyplot.close(fignum) > > 3) Python uses pools of memory, and is often imposes a significant delay > returning memory to the operating system. It is actually very hard to > determine from the outside whether something is leaking or just pooling > without compiling a special build of Python with memory pooling turned off. > > In general, interactive use is somewhat at odds with creating many large > plots in a single session, since all of the nice interactive features > (history etc.) do not know automagically when the user is done with > certain objects. > > I am not aware of any memory leaks in current versions of matplotlib > with *noninteractive* use, other than small leaks caused by bugs in > older versions of some of the GUI toolkits (notably gtk+). If you find > a script that produces a leak reproducibly, please share so we can track > down the cause. > > Gary Ruben wrote: >> Doing plot(rand(1000000)) or matshow(rand(1000,1000)) for example eats >> a big chunk of memory (tried with TkAgg and WxAgg in Windows (mpl >> v0.98.5.2) and Linux (mpl v0.98.3)), most of which is not returned >> when the window is closed. The same goes if you create an array, plot >> it, and explicitly del it after closing the window. > Can you elaborate on these steps? It's possible that the del has little > effect, since del only deletes a single reference to the object, not all > references which may be keeping it alive (such as the figure, which > matplotlib itself keeps a reference to). In general, you need to > explicitly call pyplot.close(fignum) to delete a figure. > > Cheers, > Mike > ------------------------------------------------------------------------------ Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA -OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise -Strategies to boost innovation and cut costs with open source participation -Receive a $600 discount off the registration fee with the source code: SFAD http://p.sf.net/sfu/XcvMzF8H _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users