摘要:上一篇文章線程專題條件變量下一篇文章線程專題線程終止與掛起使用諸如之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或相互競爭。依賴鎖的代碼應該保證當出現異常時可以正常的釋放鎖。
上一篇文章:Python線程專題7:條件變量
下一篇文章:Python線程專題9:線程終止與掛起
使用諸如Lock、RLock、Semphore之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或相互競爭。依賴鎖的代碼應該保證當出現異常時可以正常的釋放鎖。
典型代碼如下:
try: lock.acquire() #關鍵部分 ... finally: lock.release()
另外,所有種類的鎖還支持上下文管理協議(寫起來更簡潔):
with語句自動獲取鎖,并且在控制流離開上下文時自動釋放鎖。
with lock: #關鍵部分 ...
此外,編寫代碼時一般應該避免同時獲取多個鎖,例如下面就應該盡量避免:
這通知很統一導致應用程序神秘死鎖,盡管與集中策略可以避免出現這種情況(如分層鎖定),但是最好在編寫代碼時避免這種嵌套鎖。
with lock_A: #關鍵部分 ... with lock_B: #B的關鍵部分 ...
盡管在Python中可以使用各種鎖和同步原語的組合編寫非常傳統的多線程程序,但有一種首推的編程方式要優于其他所有編程方式:即將多線程程序組織為多個獨立任務的集合,這些任務之間通過消息隊列進行通信,例如下面要講的queue模塊。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42417.html
摘要:上一篇文章進程專題完結篇多進程處理的一般建議下一篇文章線程專題多線程使用的必要性進程線程進程能夠完成多任務,比如在一個電腦上可以運行多個軟件。由于占用資源少,也使得多線程程序并發比較高。 上一篇文章:Python進程專題完結篇:多進程處理的一般建議下一篇文章:Python線程專題1:多線程使用的必要性 進程VS線程 進程:能夠完成多任務,比如在一個電腦上可以運行多個軟件。線程:也能夠...
摘要:上一篇文章線程專題事件下一篇文章線程專題使用鎖的注意事項條件變量時構建在另一個鎖上的同步原語,當需要線程關注特定的狀態變化或事件發生時將使用這個鎖。 上一篇文章:Python線程專題6:事件下一篇文章:Python線程專題8:使用鎖的注意事項 條件變量時構建在另一個鎖上的同步原語,當需要線程關注特定的狀態變化或事件發生時將使用這個鎖。典型的用法是生產者與消費者問題,其中一個線程生產的...
摘要:上一篇文章線程專題使用鎖的注意事項下一篇文章線程專題多線程按順序執行線程沒有任何方法可用于強制終止或掛起。實用工具函數函數名解釋返回當前活動的對象數量。 上一篇文章:Python線程專題8:使用鎖的注意事項下一篇文章:Python線程專題10:queue、多線程按順序執行 線程沒有任何方法可用于強制終止或掛起。這是設計上的原因,因為編寫線程程序本身十分復雜。例如:如果某個線程已經獲取...
摘要:語法創建定時器對象,在秒后運行函數,和提供傳遞給的參數和關鍵字參數。在調用方法后才能啟動計定時器。如果函數還未執行,取消定時器。否則,鎖將保持已鎖定狀態。 上一篇文章:Python線程專題3:thread對象下一篇文章:Python線程專題5:信號量與有邊界的信號量 Timer對象、Lock對象、Rlock對象 Timer對象 Timer對象用于在稍后的某個時間執行一個函數。 語法:...
摘要:有邊界的信號量語法創建一個新的有邊界信號量。是計數器的初始值,如果忽略,將默認為信號量與有邊界的信號量的區別的工作方式與完全相同,但操作的次數不能超過的操作次數。信號量與互斥鎖的微妙差別信號量可用于發送信號。 上一篇文章:Python線程專題4:Timer對象、Lock對象、Rlock對象下一篇文章:Python線程專題6:事件 信號量與有邊界的信號量 信號量是一個基于計數器的同步原...
閱讀 3459·2023-04-25 19:39
閱讀 3810·2021-11-18 13:12
閱讀 3638·2021-09-22 15:45
閱讀 2438·2021-09-22 15:32
閱讀 722·2021-09-04 16:40
閱讀 3731·2019-08-30 14:11
閱讀 1890·2019-08-30 13:46
閱讀 1567·2019-08-29 15:43