Scoped Lock

Michael Hudson mwh at python.net
Mon Jan 5 12:12:53 EST 2004


Ype Kingma <ykingma at accessforall.nl> writes:

> Marco Bubke wrote:
> 
> > Hi
> > 
> > There is the Lock object in the threading module.
> > But there is no medode there I could aquire a scoped
> > lock like:
> > 
> > mutex = threading.Lock()
> > my_lock = mutex.scoped_acquire() # maybe scoped_lock()
> > #now this stuff is locked
> > 
> > del mylock
> > 
> > #the lock is released.
> > 
> > def do_domething:
> >   my_lock = mutex.scoped_acquire()
> >   #now this stuff is locked
> >   #the lock is released after its out of scope
> > 
> > 
> > I have written this my own but I'm not sure there is a drawback
> > because its looks so convinent. So I wonder why its not in
> > the module?
> 
> Some reasons:
> - What should happen when an exception happens during the locked stuff?
> - It is possible pass a reference to the lock during the locked stuff,
>   so although the lock goes out of local scope, there still might be
>   a reference to it.
> - The moment that __del__() is called is not guaranteed.
> 
> You can also do it like this:
> 
> mutex = threading.Lock()
> mutex.acquire()
> try:
>     # now this stuff is locked
> finally:
>     mutex.release() # explicit is better than implicit

This is the way to do it today.  There's PEP 310 which, if accepted,
makes this at least shorter to write... (and PEP 310 references a
lengthy discussion about whether using __del__ like this is wise).

Cheers,
mwh

-- 
3. Syntactic sugar causes cancer of the semicolon.
  -- Alan Perlis, http://www.cs.yale.edu/homes/perlis-alan/quotes.html



More information about the Python-list mailing list