@synchronized dect'r &c.
Paul McGuire
ptmcg at austin.rr.com
Sat Feb 23 19:19:40 EST 2008
On Feb 23, 2:03 pm, castiro... at gmail.com wrote:
>
> 1) @synchronized
>
> @synchronized
> def function( arg ):
> behavior()
>
> Synchronized prevents usage from more than one caller at once: look up
> the function in a hash, acquire its lock, and call.
>
> def synchronized( func ):
> def presynch( *ar, **kwar ):
> with _synchlock:
> lock= _synchhash.setdefault( func, allocate_lock() )
> with lock:
> return func( *ar, **kwar )
> return presynch
>
No need for a global _synchhash, just hang the function lock on the
function itself:
def synch(f):
f._synchLock = Lock()
def synchedFn(*args, **kwargs):
with f._synchLock:
f(*args, **kwargs)
return synchedFn
You might also look at the PythonDecoratorLibrary page of the Python
wiki, there is a synchronization decorator there that allows the
function caller to specify its own lock object (in case a single lock
should be shared across multiple functions).
-- Paul
More information about the Python-list
mailing list