這篇文章將為大家詳細講解有關python 中的多線程出現(xiàn)死鎖怎么解決,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設計制作、成都網(wǎng)站設計、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務嘉魚,十年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:13518219792死鎖的原理非常簡單,用一句話就可以描述完。就是當多線程訪問多個鎖的時候,不同的鎖被不同的線程持有,它們都在等待其他線程釋放出鎖來,于是便陷入了永久等待。比如A線程持有1號鎖,等待2號鎖,B線程持有2號鎖等待1號鎖,那么它們永遠也等不到執(zhí)行的那天,這種情況就叫做死鎖。
上下文管理器
首先我們來簡單介紹一下上下文管理器,上下文管理器我們其實經(jīng)常使用,比如我們經(jīng)常使用的 with語句 就是一個上下文管理器的經(jīng)典使用。當我們通過with語句打開文件的時候,它會自動替我們處理好文件讀取之后的關閉以及拋出異常的處理,可以節(jié)約我們大量的代碼。
同樣我們也可以自己定義一個上下文處理器,其實很簡單,我們只需要實現(xiàn)__enter__和__exit__這兩個函數(shù)即可。__enter__函數(shù)用來實現(xiàn)進入資源之前的操作和處理,那么顯然__exit__函數(shù)對應的就是使用資源結(jié)束之后或者是出現(xiàn)異常的處理邏輯。有了這兩個函數(shù)之后,我們就有了自己的上下文處理類了。
我們來看一個樣例:
class Sample: def __enter__(self): print('enter resources') return self def __exit__(self, exc_type, exc_val, exc_tb): print('exit') # print(exc_type) # print(exc_val) # print(exc_tb) def doSomething(self): a = 1/1 return a def getSample(): return Sample() if __name__ == '__main__': with getSample() as sample: print('do something') sample.doSomething()