Python条件变量超时

dan*_*ast 4 python multithreading condition-variable

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

cv.acquire()
cv.wait(1.0)
cv.release()
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 5

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

因此,文档示例如下:

cv.acquire()
while not an_item_is_available():
    cv.wait()
get_an_available_item()
cv.release()
Run Code Online (Sandbox Code Playgroud)

文件还说明:

[...]对状态的特定更改感兴趣的线程会反复调用wait(),直到它们看到所需的状态

如果您确实迫切需要区分超时和信号,则需要使用Event对象 ; 如果未设置标志(仅在达到超时时发生),则.wait(timeout)Event对象的调用返回None.


erg*_*sys 5

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

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