进程死亡时消失的 Python 锁
Posted
技术标签:
【中文标题】进程死亡时消失的 Python 锁【英文标题】:Python locks that go away when process dies 【发布时间】:2012-01-11 16:42:33 【问题描述】:是否有任何 Python 的锁定接口可以在进程终止时自动打破锁定?我的印象是 sysv ipc 允许这样做,但我仍在尝试找出细节。
我对界面的期望:
锁定/释放函数 在 Linux 上的不同进程之间工作 当持有锁的进程死亡时自动解锁 超时时强制中断锁(非必要)【问题讨论】:
【参考方案1】:您可以使用fcntl.lockf
或fcntl.flock
对文件应用锁定。这似乎符合您的所有标准。或者您是否需要在每次想要锁定或解锁时都不需要系统调用的东西?
【讨论】:
【参考方案2】:我通常使用 try ... finally 块来释放锁。 例如
try:
#do stuff
except Exception:
pass
finally:
#release lock
【讨论】:
【参考方案3】:您可以尝试内置 multiprocessing
包中的 Lock
对象。我不确定当进程被垃圾回收时锁是否会自动解锁,但你总是可以像这样子类multiprocessing.Process
:
class MyProc(multiprocessing.Process):
def __init__(self):
self.ipc_lock = multiprocessing.Lock()
# ...
return
def __del__(self):
self.ipc_lock.release()
return
如果您需要在触发异常时解锁,则将其放入(覆盖的)run
方法中。
【讨论】:
以上是关于进程死亡时消失的 Python 锁的主要内容,如果未能解决你的问题,请参考以下文章
当父进程死亡时,如何杀死使用 subprocess.check_output() 创建的 python 子进程?
Erlang:控制Erlang进程崩溃时如何使连接的外部OS进程自动死亡?
QProcess::startDetached shell 在父进程死亡时被杀死,如果父进程是一个 systemd 服务