[Python-Dev] Revised Proposal: thread.get_dict

Jim Fulton jim at zope.com
Wed Jun 30 15:16:37 EDT 2004


Armin Rigo wrote:
> Hello Jim,
> 
> On Wed, Jun 30, 2004 at 10:24:26AM -0400, Jim Fulton wrote:
> 
>>Here is a demonstration Python implementation:
>>
>>  from threading import currentThread
>>
>>  class local(object):
>>
>>    ...
> 
> 
> The instance should clear the entry from all the per-thread dictionaries when
> it is deallocated,

Ugh.  Now you want me to work hard. ;)

...

> 
> Descriptor fun!  I think there is a way to write this class so that "regular"
> attributes like __class__ still work, and without having to special-case
> __dict__.  Something along the lines of:
> 
>     def __patch(self):
>         key = "thread-local-%x" % id(self)
>         d = currentThread().__dict__.setdefault(key, {})
>         object.__setattr__(self, '__dict__', d)
> 
>     def __getattribute__(self, name):
>         self.__patch()
>         return super(local, self).__getattribute__(name)
> 
>     def __setattr__(self, name, value):
>         self.__patch()
>         super(local, self).__setattr__(name, value)
> 
> I am unclear about how C types should do the equivalent of the 'super' call,
> though.  But I'm ok with declaring that we don't care and use
> PyObject_Generic[GS]etAttr().

Note that this makes it go somewhat slower, since we now have to
search the class dictionary as well as the instance dictonary.
I don't think it's worth it to avoid special handling for __dict__
and __class__.

This approach *does* provide the benefit that you can subclass
thead.local to ad default values, methods, and descriptors, which
I think could be very useful. I'll investigate this.

The easiest way to do this in C will be to have different logic
for the base class and for subclasses.  For the base class,
I'll do what I'm doing now (adding handling for __class__).
For subclasses, I'll do what you suggest. This mans that
simple usages of the base class don't get the extra performance
hit.

> 
> Finally, don't forget __delattr__.

Yup.

Thanks.

Jim

-- 
Jim Fulton           mailto:jim at zope.com       Python Powered!
CTO                  (540) 361-1714            http://www.python.org
Zope Corporation     http://www.zope.com       http://www.zope.org



More information about the Python-Dev mailing list