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文档没有提供关于此的线索.
你不应该关心; 典型的情况是你的等待线程检查一些共享状态,直到该状态匹配某些条件.
因此,文档示例如下:
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.
Martijn的答案适用于旧版本的Python,但是在3.2中,这种情况发生了变化.该方法wait()现在返回False超时.
有趣的是,现在也有一种wait_for()方法.这采用谓词方法,并等待它评估True.超时后,返回False.
| 归档时间: |
|
| 查看次数: |
4649 次 |
| 最近记录: |