python - 在 try block 中获取

标签 python locks

我正在编写一本开放源码的 Python 中级书籍,并浏览了一些 PEP。在 PEP310 , 有一个关于“with”语句的旧建议。该提案最终被否决,但以下陈述让我印象深刻:“另一个常见错误是在 try block 中编写“acquire”调用,如果获取失败,它会错误地释放锁。”

有人可以详细说明将 acquire 放入 try 中会如何改变吗?据我了解,Python 中的 acquire 调用仅返回一个 bool 值,指示是否已成功获取锁,那么将其放入 try block 中有何改变呢?

最佳答案

我相信这就是它所指的:

try:
    lock.acquire()
finally:
    lock.release()

如果 acquire() 引发异常,将调用 release(),即使 acquire() 没有成功。在当前未锁定的锁上调用 release() 可能会引发另一个异常,即仅与问题根源间接相关的异常。

编写 block 的正确方法是使用 with,或者:

lock.acquire()
try:
    ...
finally:
    lock.release()

无论文档是否建议调用引发异常,您都应该始终编写代码以应对异常。没有什么可以阻止 future 的行为改变。

关于python - 在 try block 中获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137554/

相关文章:

Python - 提取重要的字符串信息

python - 如何将 numpy 数组转换为 gif?

python - Beautiful Soup 没有 'get' 完整网页

java - 为什么需要在 CopyOnWriteArrayList 中调用 setArray() 方法

c 线程和资源锁定

python - 在线程之间共享对象时如何避免 pickle 错误?

concurrency - 如何在 Rust 中使用锁?

python - Visual Studio 代码和 virtualenv

.net - C# Locks - 在循环之前还是在循环内部锁定更好?

python - 这个向量是如何工作的?