matt at mondoinfo.com (Matthew Dixon Cowles) writes: > On Tue, 10 Apr 2001 18:55:36 +0200, Michael Ströder > <michael at stroeder.com> wrote: > > >I'm currently doing something like this code below to make sure that > >locks are released also in case of any exception raised: > > > >my_lock = threading.Lock() > > > >my_lock.acquire() > >try: > > ..some single action.. > >except: > > my_lock.release() > > raise > >my_lock.release() > > > >But this looks crude to me. Any more elegant way of doing this? > > This is just the sort of situation that the try...finally sequence was > designed for. See: > > http://www.python.org/doc/current/ref/try.html > > and have a look at the last two paragraphs. > > Regards, > Matt In a similar vein, would the following work? : class Guard: def __init__(self, Lock lock): self.lock = lock if not self.lock.acquire() == 1: raise RuntimeError, "Failed to acquire lock"; def __del__(self): self.lock.release() my_lock = threading.Lock() def my_function(): global my_lock g = Guard(my_lock) do_stuff_that_might_raise_an_exception() -- Brian Raven switch (ref $@) { OverflowError => warn "Dam needs to be drained"; DomainError =>
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4