在Python3.4中获取锁时如何正确尝试/捕捉超时错误

2024-05-21 01:54:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我将threading.RLock用于多线程应用程序。我希望线程尝试获取一个锁,如果不成功,则在重试时间低于某个超时阈值的情况下重试几次。在

这是我所拥有的

>>> import threading
>>> lock = threading.RLock()
>>> def worker():
        with lock.acquire(timeout=5):
            print('acquired')
>>> lock.acquire()
>>> t2 = threading.Thread(target=worker)
>>> t2.start()

这似乎很管用,我在等待了5秒后出现了一个异常:

^{pr2}$

AttributeError似乎很奇怪-难道我们不应该看到某种超时错误吗?在

我的问题是:

  1. 我在python3.4中正确地执行了这个操作吗?我一直在研究一个似乎针对Python2.7的similar question asked on SO。此外,我还有些困惑,如果lock.acquire接受超时参数,为什么还要使用条件变量。在
  2. 有没有更好的模式来重试lock.acquire,在两次重试之间有一个超时/延迟?在

Tags: importlock应用程序defwith时间timeout情况
1条回答
网友
1楼 · 发布于 2024-05-21 01:54:02

锁是上下文管理器,但是acquire不返回上下文管理器。如果超时,它也不会抛出异常。在

Lock.acquireRLock.acquire如果获得了锁,则返回{},如果没有,则返回{}。要测试是否获得了锁,只需检查返回值。不要使用withtry-except。在

相关问题 更多 >