如果Python线程在获取锁定后死亡会发生什么?

时间:2014-09-06 06:52:45

标签: python multithreading thread-safety

在我的程序中,我有一个只从服务器发送和获取更新的线程。我尝试优雅地处理异常,但为了防止线程死亡,我只想重新启动它。问题是线程在使用某些资源之前获取了锁(Threading.RLock对象),并且我不知道如果线程在获取锁之后但在释放之前死亡会发生什么。我怎么能处理这种情况呢?

1 个答案:

答案 0 :(得分:4)

如果你acquire your locks using with statements

with whatever_lock:
    do_stuff()

或正确构造的try-finally语句(少推荐,但有时是必要的):

whatever_lock.acquire()
try:
    do_stuff()
finally:
    whatever_lock.release()

然后,如果发生异常,当异常传播出获取锁的控制流结构时,锁将被释放。

这意味着如果你正在做正确的事情,垂死的线程通常会在他们死亡时释放所有锁。另一方面,如果你没有安全地获得你的锁,或者线程死亡可能意味着死锁而不是未处理的异常,那么当线程死亡时锁可能会被获取。