簡體   English   中英

如果Python線程在獲得鎖后死亡,會發生什么情況?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM