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