摘要:上一篇文章線程專題事件下一篇文章線程專題使用鎖的注意事項條件變量時構建在另一個鎖上的同步原語,當需要線程關注特定的狀態變化或事件發生時將使用這個鎖。
上一篇文章:Python線程專題6:事件
下一篇文章:Python線程專題8:使用鎖的注意事項
條件變量時構建在另一個鎖上的同步原語,當需要線程關注特定的狀態變化或事件發生時將使用這個鎖。典型的用法是生產者與消費者問題,其中一個線程生產的數據提供給另外一個線程使用。
語法:c=Condition(lock) 穿件新的條件變量。lock時可選的Lock或RLock的實例。如果未提供lock參數,就會創建新的RLock實例供條件變量使用。常用方法:
c.acquire(*args):獲取底層鎖。此方法將調用底層鎖上對應的acquire(*args)方法。 c.release():釋放底層鎖。此方法將調用底層鎖上對應的release()方法 c.wait(timeout):等待直到獲取通知或出現超時為止。此方法在調用線程已經獲取鎖之后調用。 調用時,將釋放底層鎖,而且線程將進入睡眠狀態,直到另一個線程在條件變量上執行notify()或notify_all()方法將其喚醒為止。 在線程被喚醒后,線程講重新獲取鎖,方法也會返回。timeout是浮點數,單位為秒。 如果超時,線程將被喚醒,重新獲取鎖,而控制將被返回。 c.notify(n):喚醒一個或多個等待此條件變量的線程。此方法只會在調用線程已經獲取鎖之后調用, 而且如果沒有正在等待的線程,它就什么也不做。 n指定要喚醒的線程數量,默認為1.被喚醒的線程在它們重新獲取鎖之前不會從wait()調用返回。 c.notify_all():喚醒所有等待此條件的線程。實例模版:使用條件變量
#條件變量實例 from threading import Condition c=Condition() def producer(): while True: c.acquire() #生產東西 ... c.notify() c.release() def consumer(): while True: c.acquire() while 沒有可用的東西: c.wait()#等待出現 c.release() #使用生產的東西 ...
注意:如果存在多個線程等待同一個條件,notify()操作會喚醒他們中的一個或多個(這種行為取決于底層的操作系統)。因此,始終有這樣的可能:某個線程被喚醒后,缺發現它等待的條件不存在了,這解釋了為什么在consumer函數中使用while循環,如果線程醒來,但是生成的項已經消失,它就會回去等待下一個信號。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42418.html
摘要:上一篇文章進程專題完結篇多進程處理的一般建議下一篇文章線程專題多線程使用的必要性進程線程進程能夠完成多任務,比如在一個電腦上可以運行多個軟件。由于占用資源少,也使得多線程程序并發比較高。 上一篇文章:Python進程專題完結篇:多進程處理的一般建議下一篇文章:Python線程專題1:多線程使用的必要性 進程VS線程 進程:能夠完成多任務,比如在一個電腦上可以運行多個軟件。線程:也能夠...
摘要:上一篇文章線程專題信號量與有邊界的信號量下一篇文章線程專題條件變量事件用于在線程之間通信。一個線程發送事件信號,一個或多個其他線程等待它。阻塞直到內部標志為。最壞的情況是,由于事件信號丟失,整個程序將會掛起。 上一篇文章:Python線程專題5:信號量與有邊界的信號量下一篇文章:Python線程專題7:條件變量事件用于在線程之間通信。一個線程發送【事件】信號,一個或多個其他線程等待它。...
摘要:上一篇文章線程專題條件變量下一篇文章線程專題線程終止與掛起使用諸如之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或相互競爭。依賴鎖的代碼應該保證當出現異常時可以正常的釋放鎖。 上一篇文章:Python線程專題7:條件變量下一篇文章:Python線程專題9:線程終止與掛起 使用諸如Lock、RLock、Semphore之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或...
摘要:可以使用標準的索引切片迭代操作訪問它,其中每項操作均鎖進程同步,對于字節字符串,還具有屬性,可以把整個數組當做一個字符串進行訪問。當所編寫的程序必須一次性操作大量的數組項時,如果同時使用這種數據類型和用于同步的單獨大的鎖,性能將極大提升。 上一篇文章:Python進程專題5:進程間通信下一篇文章:Python進程專題7:托管對象 我們現在知道,進程之間彼此是孤立的,唯一通信的方式是隊...
摘要:上一篇文章線程專題多線程使用的必要性下一篇文章線程專題對象在一個進程內的所有線程共享全局變量。但多線程對全局變量的更改會導致變量值得混亂。 上一篇文章: Python線程專題1:多線程使用的必要性下一篇文章:Python線程專題3:thread對象 在一個進程內的所有線程共享全局變量。但多線程對全局變量的更改會導致變量值得混亂。 實例:驗證同一個進程內所有線程共享全局變量 代碼: #...
閱讀 2648·2021-11-24 09:39
閱讀 1648·2021-11-24 09:38
閱讀 629·2021-11-22 14:44
閱讀 1888·2021-11-18 10:02
閱讀 2573·2021-11-18 10:02
閱讀 1158·2021-10-14 09:43
閱讀 4244·2021-09-29 09:35
閱讀 524·2021-07-30 15:30