python - 如果 Python 线程在获取锁后死亡,会发生什么情况?

标签 python multithreading thread-safety

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

最佳答案

如果你acquire your locks using with statements :

with whatever_lock:
    do_stuff()

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

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

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

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

关于python - 如果 Python 线程在获取锁后死亡,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25697684/

相关文章:

Java,线程死锁?

c# - C# 中的多线程启动画面?

objective-c - 在线程之间转移对象所有权?

python - 适用于 Appengine 的 Cython

python - 使用 gmail 使用 python 发送邮件

java - Android camera : Threads? 哪个应该做什么

c# - 输出的时候发现currentId不是预期的10000。为什么?如何纠正

java - JAVA方法中的线程互斥

python - 并非所有参数都在 SQL 语句中使用(Python、MySQL)

返回 bool 值和消息的 Pythonic 方式