[IPython-dev] memory leak?
Fernando Perez
Fernando.Perez at colorado.edu
Fri Apr 7 04:46:27 EDT 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