2011-09-15 145 views
29

我還沒有找到的threading模塊ConditionEvent類之間的差別清晰的解釋。是否有明確的用例,其中一個比另一個更有幫助?我可以找到的所有示例都使用生產者 - 消費者模型作爲示例,其中queue.Queue將是更直接的解決方案。threading.Condition VS threading.Event

回答

35

簡而言之,當線程有興趣等待某些事情成爲真,並且一旦它爲真,就可以獨佔訪問某些共享資源。

而線程只是在等待某些東西變成真實的時候使用事件。

實質上,Condition是一個抽象的Event + Lock,但當你考慮到在同一個底層鎖上可以有多個不同的Condition時,它會變得更有趣。因此,您可以使用不同的條件來描述底層資源的狀態,這意味着您可以喚醒僅對共享資源的特定狀態感興趣的工作人員。

+0

所以一個條件是一個抽象的Event + Lock? –

+2

本質上是......但是當你認爲你可以在同一個底層鎖上有幾個不同的條件時它會變得更有趣。因此,您可以使用不同的條件來描述底層資源的狀態,這意味着您可以喚醒僅對共享資源的特定狀態感興趣的工作人員。 – donkopotamus

+0

是'threading.Condition()。wait()'阻塞的等待嗎? – overexchange

相關問題