2008/12/10 Robert Kern <robert.kern@gmail.com>: On Mon, Dec 8, 2008 at 19:15, frank wang <f.yw@hotmail.com> wrote:
Hi,
I have a program with some variables consume a lot of memory. The first time I run it, it is fine. The second time I run it, I will get MemoryError. If I close the ipython and reopen it again, then I can run the program once. I am looking for a command to delete the intermediate variable once it is not used to save memory like in matlab clear command.
How are you running this program? Be aware that IPython may be holding on to objects and preventing them from being deallocated. For example:
In [7]: !cat memtest.py class A(object): def __del__(self): print 'Deleting %r' % self
a = A()
In [8]: %run memtest.py
In [9]: %run memtest.py
In [10]: %run memtest.py
In [11]: del a
In [12]: Do you really want to exit ([y]/n)?
$ python memtest.py Deleting <__main__.A object at 0x915ab0>
You can remove some of these references with %reset and maybe a gc.collect() for good measure.
Of course, if you don't need to have access to the variables created in your program from the IPython session, you can run the program in a separate python process: In [1]: !python memtest.py Deleting <__main__.A object at 0xb7da5ccc> In [2]: !python memtest.py Deleting <__main__.A object at 0xb7e5fccc> Cheers, Scott