協程.執行緒和程序的補充
執行緒:threading提供執行緒相關的操作。執行緒是應用程式工作的做小單位,它包含在程序中,是程序中的實際執行單位。一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每個執行緒並執行不同的任務。
threading模組建立在-thread之上,thread以低階的最原始的方式來處理控制執行緒,而threading模組通過對-thread二次封裝,提供了更方便的api來處理執行緒。
執行緒鎖:我們使用執行緒對資料進行操作的時候,如果多個執行緒同時修改某個資料的時候,可能會出現多個不同的預料結果,為了保證資料的準確性,引入了鎖的概念。
threading.Rlock與threading.Lock的區別:
Rlock允許在同一執行緒中被多次acquire。而Lock卻不允許這樣,如果使用Rlock,那麼acquire和release必須成對出現,即呼叫了n次acquire必須呼叫n次release才能釋放所佔用的鎖。
threading.Event
Event是執行緒間通訊最直接的機制之一。一個執行緒傳送一個Event訊號,則其他執行緒等待這個訊號。用於主執行緒控制其它執行緒的執行。Event管理一個flag,這個flag可以使用set()設定成ture()或者使用clear()重置為false。
wait()這用於阻塞,在flag為ture之前,flag預設為false
threading.Condition
Python提供的condition物件提供了對複雜執行緒同步問題的支援。condition被稱為條件變數,除了提供與lock類似acquire和release方法外,還提供了wait和notify方法。執行緒首先acquire一個條件變數,然後判斷一些條件。
如果條件不滿足則wait,如果條件滿足進行一些處理改變條件後,通過notify方法通知其它執行緒,其它處於wait狀態的執行緒接到通知後會重新判斷條件,不斷的重複這一過程,從而解決複雜的同步問題。
在典型的設計風格里,利用condition變數鎖去訪問一些共享狀態,執行緒在獲取到它想得到的狀態前,會反覆呼叫wait()。修改狀態的執行緒在他們狀態改變時呼叫notify()活notify-all(),用這種方式,執行緒會盡可能的獲
取到想要的一個等待者的狀態。