什么是锁的最佳使用与尝试。。。除了Python 2.7之外?
假设我有一个什么是锁的最佳使用与尝试。。。除了Python 2.7之外?,python,locking,python-multithreading,Python,Locking,Python Multithreading,假设我有一个threading.Lock()对象,我想获取它以使用资源。假设我想使用试试。。。除了带有资源的…子句 有几种方法可以做到这一点 方法1 import threading lock = threading.Lock() try: with lock: do_stuff1() do_stuff2() except: do_other_stuff() 如果在do_stuff1()或do_stuff2()期间发生错误,锁是否会被释放?还是使
threading.Lock()
对象,我想获取它以使用资源。假设我想使用试试。。。除了带有资源的…
子句
有几种方法可以做到这一点
方法1
import threading
lock = threading.Lock()
try:
with lock:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
如果在do_stuff1()
或do_stuff2()
期间发生错误,锁是否会被释放?还是使用以下方法之一更好
方法2
with lock:
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
方法3
lock.acquire():
try:
do_stuff1()
do_stuff2()
except:
do_other_stuff()
finally:
lock.release()
哪种方法最适合在发生错误时释放锁?带的需要一种\uuuu退出
方法,在这种情况下,该方法将确保无论发生什么情况,锁
都是释放
d
如果要处理在使用该锁执行任何操作期间发生的异常,应将try
放在with
块中,即方法2是正确的方法。通常,您应该始终将try
块中的代码量最小化
你也应该尽可能明确哪些地方会出错;除了:
之外的裸是不好的做法(参见示例)。至少(即使是一个简单的例子!)你应该使用,例外除外:
非常糟糕。我个人更喜欢不使用try的第1种方法。
除了这是的全部要点,上下文管理器的\uuuuuuu退出
部分无论发生什么情况都会释放锁。如果你想在使用它的过程中发现错误,那么try
应该在with
(方法2)中。@Theourtheye这是一个例子,我知道。。。谢谢:-)第一个方法在调用do\u other\u stuff()
之前释放锁,这样可以减少锁的占用时间,减少争用。也许是最小的因素,但仍然如此。