[python-win32] Python Finalisation

Mark Hammond skippy.hammond at gmail.com
Mon Jan 21 05:34:38 CET 2013


Unfortunately there are a number of problems repeatedly initializing and 
finalizing Python, hence the code you saw in pywin32 that no longer 
attempts to support it.  The short-story is simply that doing this is 
not supported using pywin32 (at least until the issues in Python are 
fixed via the new module API which supports this, and pywin32 is 
adjusted accordingly)

Mark

On 15/01/2013 9:32 AM, Tom Bowles wrote:
> On 10 January 2013 18:48, Tom Bowles <tomthemighty at googlemail.com> wrote:
>>
>> On 10 January 2013 17:15, Aahz <aahz at pythoncraft.com> wrote:
>>>
>>> On Thu, Jan 10, 2013, Tom Bowles wrote:
>>>>
>>>> Hi,  I have a question regarding python finalisation when using pywin32.
>>>> The details are at
>>>> http://stackoverflow.com/questions/14257654/how-should-i-or-should-i-finalize-python-in-the-presence-of-pywin32.
>>>> I can reproduce the question here if preferred, but there's a lot of
>>>> formatting and I'm posting this from a phone. Hope the stackoverflow link
>>>> is acceptable.
>>>
>>> I'm certainly not looking at Stackoverflow, and it disrupts the archives
>>> of this list.  Please repeat your full question here.
>>> --
>>> Aahz (aahz at pythoncraft.com)           <*>         http://www.pythoncraft.com/
>>>
>>> Weinberg's Second Law: If builders built buildings the way programmers wrote
>>> programs, then the first woodpecker that came along would destroy civilization.
>>
>>
>>
>> Sure. For a more specialist audience than SO it boils down to:
>>
>> 1. Should I call PyWinGlobals_Free() before calling Py_Finalize()? If I don't I get errors,  which I can give more detail about if you want.
>>
>>
>> 2. Why does pycom's dllmain.cpp contain a comment implying that it is not safe to "ever" finalize python "in the COM world".
>> 3. What happened to the pycom-dev archive? pythonpros.com, which all the links to it I can find point to, appears to be a sedo parking thing.
>>
>>
>> Tom
>
>
> Does anybody have any thoughts on this?
>
> If I call Py_Finalize() without calling PyWinGlobals_Free(), then
> after I re-initialize python and start using pywin32 again I get
> "NoneType is not callable" errors, which appear to originate on line 3
> of the string that is executed with PyRun_String() in
> pywintypesmodule.cpp. This string contains the definition of a class
> called "error".
>
> It appears that the class definition is somehow surviving across the
> python reinitialisation, but in a broken state, so that when it
> eventually gets used again the value of "len" is None, instead of the
> len() function as it should be.
>
> Calling PyWinGlobals_Free() before finalising python causes the state
> to be reset so that on reinitialisation the "error" class definition
> string gets executed again with PyRun_String(). This avoids the errors
> I have experienced, but I don't know if it's the right thing to do.
>
> On the one hand, at the C++ code level it looks plausible that the
> PyWinGlobals_Free() export is intended to be called as a cleanup
> before finalisation. Also, in the dllmain.cpp file for pycom, there is
> commented out finalisation code which calls PyWinGlobals_Free(), which
> suggests it might be the right thing to do.
>
> On the other hand, there is no mention at all of PyWinGlobals_Free()
> in the pywin32 documentation, and there is no indication there (or
> anywhere else I can find) that it is necessary to do anything special
> before finalising python when using pywin32. Also, the dllmain.cpp
> file in pycom has a comment suggesting that finalisation might not be
> safe at all, and the file mentions the "pycom-dev" archives as a
> source of further information. However, these archives no longer
> appear to exist. It looks like the domain registration for
> pythonpros.com has expired.
>
> Any clarification you can provide would be very helpful.
>
> Thanks,
> Tom
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32
>



More information about the python-win32 mailing list