Scoped Lock

Ype Kingma ykingma at accessforall.nl
Mon Jan 5 00:33:20 CET 2004


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

Regards,
Ype

email at xs4all.nl



More information about the Python-list mailing list