Suppose that I have a threading.Lock()
object that I want to acquire in order to use a resource. Suppose I want to use a try ... except ...
clause with the resource.
There are several ways of doing this.
Method 1
import threading
lock = threading.Lock()
try:
with lock:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
If an error occurs during do_stuff1()
or do_stuff2()
, will the lock be released? Or is it better to use one of the following methods?
Method 2
with lock:
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
Method 3
lock.acquire():
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
finally:
lock.release()
Which method is best for the lock to be released even if an error occurs?