Thx guys.

now quick question on the usage of thread local storage.

In my case I have the below object model:

class Base(object):'
 def __init__(self):
   self.__service = None
 def _GetService():
   if not hasattr(threading.currentThread(), 'service'):
     threading.currentThread().service = Service()
     self.__service =  threading.currentThread().service

   return self.__service

class Child1(Base):'
 def DoSomething():
   service = self._GetService()
   # use service

class Child2(Base):'
 def DoSomething():
   service = self._GetService()
   # use service

The above Child classes are used by a controller:

class Controller(object):
 def process(self):
   c1 = Child1()
   c1.DoSomething()
   ....
   ...
   c2 = Child2()
   c2.DoSomething()

Using the above technique the "service" is instantiated only one time i.e.
as soon as I create the first instance of the Child class abd associated
with the current thread for future instantiation of any Child class.

Now in this scenario how can I use thread local ? Where do I keep the thread
local object as in my case I am instantiating the Child classes ? Using
currentThread() always gives me the same thread instance for a given request
and I can bypass instantiating the Service class by simply returning the
"service" attribute already attached to the current thread.

Any suggestion appreciated!

- A






On 4/15/07, Kent Johnson <[EMAIL PROTECTED]> wrote:

Andreas Kostyrka wrote:
> * Kent Johnson <[EMAIL PROTECTED]> [070414 19:53]:
>> That's a good point. Does anyone know when to prefer threading.local()
>> vs thread attributes?
> It's design question, I guess:
>
> *) if you have thread subclasses, then use thread attributes.
> *) if you have standard threads, then use thread.local().
>
> The idea is, that it's "rude" to stick attributes on an object that is
> not owned by you.
>
> Rationale:
> *) Somebody might decide to make threading.Thread be a new style
> object with __slots__ => your code breaks.
>
> I know, it's unprobably, but if you derive a subclass, you can be at
> least sure that the object will have a __dict__ ;)

If you use threading.local() you can be sure the names you use don't
conflict with any attributes of the thread.

Kent
_______________________________________________
Tutor maillist  -  [EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/tutor

_______________________________________________
Tutor maillist  -  [EMAIL PROTECTED]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to