Scoped Lock

Marco Bubke marco at bubke.de
Wed Jan 7 09:30:45 CET 2004


Michael Hudson wrote:

> 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).

Thats looks really nice.

thx

Marco




More information about the Python-list mailing list