Python線程下使用鎖的技巧分享
使用諸如Lock、RLock、Semphore之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或相互競爭。依賴鎖的代碼應該保證當出現(xiàn)異常時可以正常的釋放鎖。
典型代碼如下:
try: lock.acquire() #關鍵部分 ... finally: lock.release()
另外,所有種類的鎖還支持上下文管理協(xié)議(寫起來更簡潔):
with語句自動獲取鎖,并且在控制流離開上下文時自動釋放鎖。
with lock: #關鍵部分 ...
此外,編寫代碼時一般應該避免同時獲取多個鎖,例如下面就應該盡量避免:
這通知很統(tǒng)一導致應用程序神秘死鎖,盡管與集中策略可以避免出現(xiàn)這種情況(如分層鎖定),但是最好在編寫代碼時避免這種嵌套鎖。
with lock_A:
#關鍵部分
...
with lock_B:
#B的關鍵部分
...
盡管在Python中可以使用各種鎖和同步原語的組合編寫非常傳統(tǒng)的多線程程序,但有一種首推的編程方式要優(yōu)于其他所有編程方式:即將多線程程序組織為多個獨立任務的集合,這些任務之間通過消息隊列進行通信,例如下面要講的queue模塊。
相關文章
Python?selenium?get_cookies獲取cookie不全的解決方案
之前使用爬蟲時最讓我頭疼的就是cookie失效的問題了,下面這篇文章主要給大家介紹了關于Python?selenium?get_cookies獲取cookie不全的解決方案,需要的朋友可以參考下2022-10-10
淺談keras使用預訓練模型vgg16分類,損失和準確度不變
這篇文章主要介紹了淺談keras使用預訓練模型vgg16分類,損失和準確度不變,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編小編過來看看吧2020-07-07

