@synchronized dect'r &c.

castironpi at gmail.com castironpi at gmail.com
Sat Feb 23 23:03:53 EST 2008


On Feb 23, 7:47 pm, castiro... at gmail.com wrote:
> On Feb 23, 6:19 pm, Paul McGuire <pt... at austin.rr.com> wrote:
>
>
>
>
>
> > 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- Hide quoted text -
>
> > - Show quoted text -
>
> Why not just:
>
> def synched( f ):
>    l= Lock()
>    def presynched( *a, **kwa ):
>       with l:
>           return f( *a, **kwa )
>
> It's not like the lock is ever used anywhere else.  Besides, if it is,
> isn't the correct spelling:
>
> class Asynched:
>    def __init__( self, func ):
>       self.func, self.lock= func, Lock()
>    def __call__( self, *a, **kwa ):
>       return self.func( *a, **kwa )
>
> and
>
> def synched( func ):
>    return Asynched( func )
>
> or even
>
> synched= Asynched
>
> ?- Hide quoted text -
>
> - Show quoted text -

So, you live around here?  Where'd you park? ;)



More information about the Python-list mailing list