繁体   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