[IPython-dev] memory leak?

Fernando Perez Fernando.Perez at colorado.edu
Fri Apr 7 03:46:27 CDT 2006


Jörgen Stenarson wrote:
> hi,
> 
> lately I have been using ipython to %run scripts that create large 
> numeric arrays (in my case say 1000x1000 complex numbers). The problem I 
> see is that when I rerun the script its like all variables created in 
> that file are not freed even though if they have not been accessed in a 
> way that would put them in the In or Out cache. For instance %running a 
> file containing
> 
> import Numeric
> a=Numeric.zeros((1000,1000),"D")
> 
> repeatedly without any intervening commands will have memory usage go up 
> with every invocation of %run. But using execfile from an ordinary 
> python prompt on the same file this is not the case. Is this a known 
> problem (I'm on windows)? If it is, is there some way to manually free 
> this memory?

I suspect the difference comes from the fact that ipython  updates the 
interactive namespace with the namespace where execfile() ran, so you do end 
up holding a reference to 'a' in your user namespace.  However, on each run 
this reference gets updated, so at least all previous instances should be freed.

IPython can't strictly speaking _leak_ memory in the C sense, given that we 
have no extension code of our own.  What can happen is that we hold references 
to stuff which prevent garbage collection from doing its job.  Just a 
technicality (since the end effect is the same, lost memory), but I wanted to 
clarify the language.

Try running a garbage collection manually,  that may help:

import gc
gc.collect()

and let us know what you see.

Cheers,

f




More information about the IPython-dev mailing list