From: Tavis R. <ta...@re...> - 2002-08-19 22:59:24
|
On August 19, 2002 03:45 pm, Matt Feifarek wrote: > | Well, most of the time we just put persistent values in module-level > | globals (remembering to do proper locking via threading.Lock, and oft= en > | using dictionaries to organize the data). > > Can you elaborate on that threading.lock bit a little? We use a similar > technique, and don't mess with threading. If two or more threads attempt to set/read a shared data value, such as a= =20 module global, at the same time you can run into synchronization issues. = =20 threading.Lock can be used to avoid them. I think it's best to use use Locks in combination with a singleton or bor= g=20 class rather than with module globals: from threading import Lock class Counter: _count =3D 1 __sharedState =3D {'_lock': Lock()} def __init__(self): =09self.__dict__ =3D self.__sharedState def count(self): return self._count def increment(self): self._lock.acquire() self._lock +=3D 1 self._lock.release() =20 def decrement(self): self._lock.acquire() self._lock -=3D 1 self._lock.release() =20 |