Python線程下使用鎖的技巧分享
使用諸如Lock、RLock、Semphore之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導(dǎo)致死鎖或相互競爭。依賴鎖的代碼應(yīng)該保證當(dāng)出現(xiàn)異常時可以正常的釋放鎖。
典型代碼如下:
try: lock.acquire() #關(guān)鍵部分 ... finally: lock.release()
另外,所有種類的鎖還支持上下文管理協(xié)議(寫起來更簡潔):
with語句自動獲取鎖,并且在控制流離開上下文時自動釋放鎖。
with lock: #關(guān)鍵部分 ...
此外,編寫代碼時一般應(yīng)該避免同時獲取多個鎖,例如下面就應(yīng)該盡量避免:
這通知很統(tǒng)一導(dǎo)致應(yīng)用程序神秘死鎖,盡管與集中策略可以避免出現(xiàn)這種情況(如分層鎖定),但是最好在編寫代碼時避免這種嵌套鎖。
with lock_A: #關(guān)鍵部分 ... with lock_B: #B的關(guān)鍵部分 ...
盡管在Python中可以使用各種鎖和同步原語的組合編寫非常傳統(tǒng)的多線程程序,但有一種首推的編程方式要優(yōu)于其他所有編程方式:即將多線程程序組織為多個獨(dú)立任務(wù)的集合,這些任務(wù)之間通過消息隊列進(jìn)行通信,例如下面要講的queue模塊。
相關(guān)文章
python機(jī)器學(xué)習(xí)pytorch?張量基礎(chǔ)教程
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)pytorch?張量基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10Python高級應(yīng)用探索之元編程和并發(fā)編程詳解
Python作為一種簡單易用且功能強(qiáng)大的編程語言,廣泛應(yīng)用于各個領(lǐng)域,本文主要來和大家一起探索一下Python中的優(yōu)化技巧、元編程和并發(fā)編程,希望對大家有所幫助2023-11-11django haystack實(shí)現(xiàn)全文檢索的示例代碼
這篇文章主要介紹了django haystack實(shí)現(xiàn)全文檢索的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06python使用jpype導(dǎo)入多個Jar的異常問題及解決
這篇文章主要介紹了python使用jpype導(dǎo)入多個Jar的異常問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12學(xué)習(xí)Python3 Dlib19.7進(jìn)行人臉面部識別
本篇文章主要給大家詳細(xì)介紹了Python3利用Dlib19.7進(jìn)行人臉面部識別的相關(guān)知識,一起學(xué)習(xí)參考下吧。2018-01-01