我将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
似乎很奇怪-难道我们不应该看到某种超时错误吗?在
我的问题是:
lock.acquire
接受超时参数,为什么还要使用条件变量。在lock.acquire
,在两次重试之间有一个超时/延迟?在
锁是上下文管理器,但是
acquire
不返回上下文管理器。如果超时,它也不会抛出异常。在Lock.acquire
和RLock.acquire
如果获得了锁,则返回{with
或try
-except
。在相关问题 更多 >
编程相关推荐