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 <tomthemig...@googlemail.com> wrote:
On 10 January 2013 17:15, Aahz <a...@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 (a...@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@python.org
http://mail.python.org/mailman/listinfo/python-win32
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32