【发布时间】:2012-01-11 16:42:33
【问题描述】:
是否有任何 Python 的锁定接口可以在进程终止时自动打破锁定?我的印象是 sysv ipc 允许这样做,但我仍在尝试找出细节。
我对界面的期望:
- 锁定/释放函数
- 在 Linux 上的不同进程之间工作
- 当持有锁的进程死亡时自动解锁
- 超时时强制中断锁(非必要)
【问题讨论】:
是否有任何 Python 的锁定接口可以在进程终止时自动打破锁定?我的印象是 sysv ipc 允许这样做,但我仍在尝试找出细节。
我对界面的期望:
【问题讨论】:
您可以使用fcntl.lockf 或fcntl.flock 对文件应用锁定。这似乎符合您的所有标准。或者您是否需要在每次想要锁定或解锁时都不需要系统调用的东西?
【讨论】:
我通常使用 try ... finally 块来释放锁。 例如
try:
#do stuff
except Exception:
pass
finally:
#release lock
【讨论】:
您可以尝试内置 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 方法中。
【讨论】: