5

thread2からの条件を待機しているthread1があります。ただし、thread2が条件変数を通知していない可能性があります。そこでwait、スレッド1の呼び出しに次のようにタイムアウトを追加しました。

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

条件変数が通知されたか、タイムアウトが発生したかをどのように知ることができますか?wait値を返さないようです。条件オブジェクトに関するPythonのドキュメントには、これに関する手がかりはありません。

4

2 に答える 2

7

あなたは気にするべきではありません。典型的なケースは、待機中のスレッドが共有状態をチェックして、その状態が何らかの条件に一致するようにすることです。

したがって、ドキュメントの例は次のとおりです。

cv.acquire()
while not an_item_is_available():
    cv.wait()
get_an_available_item()
cv.release()

また、ドキュメントには次のように記載されています。

[…]特定の状態変化に関心のあるスレッドは、目的の状態が表示されるまでwait()を繰り返し呼び出します。

タイムアウトとシグナルを区別する差し迫った必要がある場合は、代わりにEventオブジェクトを使用する必要があります。フラグが設定されていない場合、オブジェクトの.wait(timeout)呼び出しがEvent返されますNone(これは、タイムアウトに達した場合にのみ発生します)。

于 2012-07-09T08:59:15.587 に答える
7

Martijnの答えは古いバージョンのPythonにも当てはまりましたが、3.2ではこれが変更されました。メソッドはタイムアウト時にwait()戻るようになりました。False

興味深いことに、今ではwait_for()方法もあります。これは述語メソッドを取り、それがに評価されるのを待ちTrueます。タイムアウトすると、Falseを返します。

于 2013-12-15T21:58:55.423 に答える