[英]acquire inside a try block
我正在研究一本開源的中級Python書籍,並研究了許多PEP。 在PEP310中 ,有一個關於“ with”語句的舊建議。 該提議最終被拒絕,但以下聲明使我震驚:“另一個常見的錯誤是在try塊中編寫了“ acquire”調用的代碼,如果失敗,該調用會錯誤地釋放鎖。
有人可以詳細說明如何在嘗試中添加獲取內容嗎? 據我了解,Python中的acquire調用僅返回一個布爾值,指示是否成功獲取了鎖,那么將其放入try塊中會如何改變呢?
我相信這是指的是:
try:
lock.acquire()
finally:
lock.release()
如果acquire()
引發異常,即使acquire()
不成功,也會調用release()
。 在當前未鎖定的鎖上調用release()
可能會引發另一個異常,即僅與問題根源間接相關的異常。
編寫該塊的正確方法是with
或一起使用:
lock.acquire()
try:
...
finally:
lock.release()
無論文檔中是否建議引發一個調用,您都應該始終編寫代碼以迎合異常。 沒有什么可以阻止將來行為的改變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.