Condition
モジュールのEvent
クラスとthreading
クラスの違いについての明確な説明はまだ見つかりません。一方が他方よりも役立つ明確なユースケースはありますか?私が見つけることができるすべての例では、例として生産者/消費者モデルを使用しています。ここで、queue.Queue
はより簡単な解決策になります。
簡単に言えば、スレッドが何かが真になるのを待つことに関心がある場合は、条件を使用しますそして、真になると、共有リソースへの排他的アクセスが可能になります。
一方、スレッドが何かが真になるのを待つことに関心がある場合は、イベントを使用します。
本質的に、Conditionは抽象化されたEvent + Lockですが、同じ基になるロックに対して複数の異なる条件を持つことができると考えると、より興味深いものになります。したがって、基になるリソースの状態を説明するさまざまな条件を持つことができます。つまり、共有リソースの特定の状態にのみ関心があるワーカーをウェイクアップできます。
もう1つの微妙な違いは、Event
のset()
がwait()
の今後の呼び出しに影響することです(つまり、wait()
の後続の呼び出しはTrue
を返し、勝ちますclear()
が呼び出されるまでブロックしません)が、Condition
のnotify()
(またはnotify_all()
)はブロックしません(wait()
の後続の呼び出しはブロックします) notify()
の次の呼び出しまでブロックします)。