Python条件变量超时

时间:2012-07-09 08:47:34

标签: python multithreading condition-variable

我有thread1正在等待来自thread2的条件。但它可能是thread2永远不会发出条件变量的信号。所以我在线程1的wait调用中添加了一个超时,如下所示:

cv.acquire()
cv.wait(1.0)
cv.release()

我如何知道条件变量是否已发出信号或是否发生超时? wait似乎没有返回任何值。 Condition Objects上的python文档没有提供关于此的线索。

2 个答案:

答案 0 :(得分:5)

你不应该关心;典型的情况是你的等待线程检查一些共享状态,直到该状态符合某些条件。

documentation example因此:

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)

对于旧版本的Python,Martijn的答案是正确的,但是在3.2中,这种情况发生了变化。方法wait()现在在超时时返回False

有趣的是,现在还有wait_for()方法。这采用谓词方法,并等待它评估为True。超时后,返回False。