Scoped Lock

Marco Bubke marco at bubke.de
Mon Jan 5 12:29:00 CET 2004


Ype Kingma wrote:

> 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 does not look nice to me. There should be something me easily.
Maybe that:

def do_something() lock(mutex):
        #this stuff is locked by the mutex

So you don't forget to release the lock.

best regards

Marco




More information about the Python-list mailing list