Memory Leak after Py_Finalize()

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Sat Mar 28 07:52:08 CET 2009


En Thu, 26 Mar 2009 14:51:00 -0300, Tom <tom_caton at xyratex.com> escribió:

> I have ported Python, numarray and numpy to the PharLap Embedded
> Operating System. Python 2.5.2 numpy 1.3.0b1
> My problem is the massive memory loss coming back after Py_Finalize()
> when using numpy. I have seen similar posts but am unclear how to
> proceed. Here are my symptomns:-
>
> Py_Initialize()
> Py_Main()
>>>>> import numpy
> Py_Finalize()
>
> This gives me a 2.34 MB memory loss each time through. Its similar for
> numarray.

I'd ask in a numpy specific forum.

> Do I need to do something before coming back from Py_Main ?  (like
> setting all the reference counts to 0 and forcing the garbage
> collector to run). Doing a >>> del numpy is not enough.

I'm afraid there isn't much you can do -- calling gc.collect() should not  
hurt, but I don't think it would help a lot either.

> I understand there is a memory loss when stopping and starting Python
> (I observe it to be about 70K) - my problem is that I dont know how to
> shutdown numpy cleanly - I want the opposite of "import numpy".

Unfortunately, the Python API doesn't have an "uninitialize module"  
function/callback (not before 3.0). A lot of modules allocate memory upon  
initialization and never release it; some do that always, even if it has  
already been initialized. (Even worse, some modules carelessly store  
Python objects as static variables; using an old instance with a new  
interpreter is likely to crash Python...)
So, if at all possible, try to avoid calling Py_Initialize and Py_Finalize  
more than once.

-- 
Gabriel Genellina




More information about the Python-list mailing list