试试看,锁的最佳用途是什么..Python 2.7中除外



假设我有一个threading.Lock()对象,我想获取它来使用资源。假设我想对资源使用try ... except ...子句。

有几种方法可以做到这一点。

方法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()

哪种方法最适合在发生错误时释放锁?

with"上下文管理器"需要一个__exit__方法,在这种情况下,它将确保无论发生什么,lock都是released。

如果您想处理在使用该lock的过程中发生的异常,则应将try放在with块内,即方法2是正确的方法。通常,您应该始终将try块中的代码量降至最低。

您还应该尽可能具体地说明可能出错的地方;裸露的except:是不好的做法(例如参见"except的罪恶")。至少(即使是一个简单的例子!)您应该使用except Exception:

最新更新