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