Memory Leak after Py_Finalize()

T

Tom

Hi,
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()Py_Finalize()

This gives me a 2.34 MB memory loss each time through. Its similar for
numarray.
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 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".
 
G

Gabriel Genellina

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()
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top