【问题标题】:Python locks that go away when process dies进程死亡时消失的 Python 锁
【发布时间】:2012-01-11 16:42:33
【问题描述】:

是否有任何 Python 的锁定接口可以在进程终止时自动打破锁定?我的印象是 sysv ipc 允许这样做,但我仍在尝试找出细节。

我对界面的期望:

  • 锁定/释放函数
  • 在 Linux 上的不同进程之间工作
  • 当持有锁的进程死亡时自动解锁
  • 超时时强制中断锁(非必要)

【问题讨论】:

    标签: python locking ipc


    【解决方案1】:

    您可以使用fcntl.lockffcntl.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 方法中。

        【讨论】:

          猜你喜欢
          • 2018-02-22
          • 2014-02-16
          • 2014-06-19
          • 1970-01-01
          • 1970-01-01
          • 2011-12-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多