[Python-Dev] Problem between deallocation of modules and func_globals

M.-A. Lemburg mal at egenix.com
Fri Jan 19 23:42:53 CET 2007


On 2007-01-19 22:33, Brett Cannon wrote:
>> That's a typical error situation you get in __del__ methods at
>> the time the interpreter is shut down.
>>
> 
> Yeah, but in this case this is at the end of Py_Initialize() for the
> stuff I am doing to the interpreter.  =)

Is that in some error branch of Py_Initialize() ? Otherwise
I don't see how the modules could get garbage-collected.

>> I'm not exactly sure which global state you are referring to. The
>> aliase map, the cache used by the search function ?
>>
> 
> encodings._cache .
> 
>> Note that the search function registry is a global managed
>> in the thread state (it's not stored in any module).
>>
> 
> Right, but that is not the issue.  If you have deleted the reference
> to the encodings module from sys.modules it then sets encodings._cache
> to None.  After the deletion, if you try to encode/decode a unicode
> string you can an AttributeError about how encodings._cache does not
> have a 'get' method since it is now None instead of a dict.  The
> function is fine and still runs, it's just that the global state it
> depends on is no longer the way it assume it should be.

While I could add some tricks to have the cache dictionary stay
alive even after the globals were set to None, I doubt that this
will really fix the problem.

The encoding package relies on the import mechanism, the codecs
module and the _codecs builtin module. Any of these could fail
to work depending on the order in which the modules get
GCed.

There's a reason why things in Py_Finalize() are as carefully
ordered :-) Perhaps we need to apply some reordering to the
steps in Py_Initialize() ?!

-- 
Marc-Andre Lemburg
eGenix.com

Professional Python Services directly from the Source  (#1, Jan 19 2007)
>>> Python/Zope Consulting and Support ...        http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ...             http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ...        http://python.egenix.com/
________________________________________________________________________

::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::


More information about the Python-Dev mailing list