我有thread1正在等待来自thread2的条件。但它可能是thread2永远不会发出条件变量的信号。所以我在线程1的wait
调用中添加了一个超时,如下所示:
cv.acquire()
cv.wait(1.0)
cv.release()
我如何知道条件变量是否已发出信号或是否发生超时? wait
似乎没有返回任何值。 Condition Objects上的python文档没有提供关于此的线索。
答案 0 :(得分:5)
你不应该关心;典型的情况是你的等待线程检查一些共享状态,直到该状态符合某些条件。
cv.acquire()
while not an_item_is_available():
cv.wait()
get_an_available_item()
cv.release()
并且文档还说明:
[...]对状态的特定更改感兴趣的线程重复调用wait(),直到它们看到所需的状态
如果您确实迫切需要区分超时和信号,则需要使用Event
objects代替;如果未设置标志(仅在达到超时时才会发生),.wait(timeout)
对象上的Event
调用将返回None
。
答案 1 :(得分:5)
wait()
现在在超时时返回False
。
有趣的是,现在还有wait_for()
方法。这采用谓词方法,并等待它评估为True
。超时后,返回False。