[英]what is the state of a thread lock in python after callingl subprocess.popen
[英]What happens if a Python thread dies after acquiring a lock?
在我的程序中,我有一個線程僅從服務器發送和獲取更新。 我嘗試優雅地處理異常,但是以防萬一線程死了,我只是想重新啟動它。 問題是線程在使用某些資源之前先獲取了鎖(Threading.RLock對象),而且我不知道如果線程在獲得鎖之后但在釋放鎖之前死亡,將會發生什么情況。 我該如何處理這種情況?
如果您使用with
語句獲取鎖 :
with whatever_lock:
do_stuff()
或在正確構造的try-finally語句中(不建議使用,但有時是必需的):
whatever_lock.acquire()
try:
do_stuff()
finally:
whatever_lock.release()
然后,如果發生異常,則在異常傳播到獲取鎖的控制流構造之外時,將釋放鎖。
這意味着,如果您做對了,死掉的線程通常會在死掉時釋放所有鎖。 另一方面,如果您不能安全地獲取鎖,或者如果線程死亡可能意味着死鎖而不是未處理的異常,那么當線程死亡時,鎖可能仍然保持獲取狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.