I'm afraid it was wishful thinking on my part.
The best we can try to hope for is to ensure that repeatedly calling
Py_Initialize and Py_Finalize doesn't leak too much memory.
--Guido
On 4/11/06, "Martin v. Löwis"
Several places in the documentation claim that Py_Finalize will release all memory:
http://docs.python.org/api/embedding.html
says that literally, and
http://docs.python.org/api/initialization.html#l2h-778
suggests it is a bug when memory is not freed in Py_Finalize.
This has left people to believe that this is a bug:
https://sourceforge.net/tracker/index.php?func=detail&aid=1445210&group_id=5470&atid=105470
However, I don't see any chance to make this promise even remotely. Objects allocated in extension modules, and held in global variables (e.g. socketmodule.c:socket_error, socket_herror, socket_gaierror, socket_timeout) will never be released, right?
And because of the small objects allocator, their pool will remain allocated, right? And, then, the arena.
So ISTM that invoking Py_Finalize after importing socket will yield atleast 256KiB garbage. Of course, that's not real garbage, because the next Py_Initialize'd interpreter will continue to allocate from the arenas. But still, the actual objects that the modules hold on to will not be reclaimed until the process terminates.
Please correct me if I'm wrong.
Regards, Martin
_______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/guido%40python.org
-- --Guido van Rossum (home page: http://www.python.org/~guido/)