当进程死亡时,Python锁会消失

时间:2012-01-11 16:42:34

标签: python locking ipc

Python是否有任何锁定接口可以在进程终止时自动中断锁定?我的印象是sysv ipc允许这样做,但我仍然试图弄清楚细节。

我对界面的期望:

  • 锁定/释放功能
  • 在Linux上的不同进程之间工作
  • 持有锁模的过程自动解锁
  • 超时强制锁定中断(不必要)

3 个答案:

答案 0 :(得分:1)

您可以使用fcntl.lockffcntl.flock将锁应用于文件。这似乎符合您的所有标准。或者,您是否需要每次想要锁定或解锁时都不需要系统调用的东西?

答案 1 :(得分:0)

我通常使用try ... finally块来释放锁。 e.g。

try:
    #do stuff
except Exception:
    pass
finally:
    #release lock

答案 2 :(得分:0)

您可以尝试内置Lock包中的multiprocessing个对象。我不确定当进程被垃圾收集时锁是否会自动解锁,但你总是可以像这样继承multiprocessing.Process

class MyProc(multiprocessing.Process):
    def __init__(self):
        self.ipc_lock = multiprocessing.Lock()
        # ...
        return
    def __del__(self):
        self.ipc_lock.release()
        return

如果在触发异常时需要解锁,则将其放入(覆盖的)run方法中。