进程终止时会消失的Python锁

1 投票
3 回答
972 浏览
提问于 2025-04-17 10:01

有没有一种Python的锁定接口,可以在进程崩溃时自动解锁?我原以为sysv ipc可以做到这一点,但我还在弄清楚具体细节。

我对这个接口的期望是:

  • 有锁定和解锁的功能
  • 可以在Linux上不同的进程之间使用
  • 当持有锁的进程崩溃时自动解锁
  • 超时后强制解锁(这不是必须的)

3 个回答

0

我通常会使用一个try ... finally的结构来释放锁。比如:

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

你可以试试内置的 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 方法里。

1

你可以使用 fcntl.lockffcntl.flock 来给文件加锁。这看起来可以满足你所有的要求。或者你是想要一种不需要每次都调用系统命令来加锁或解锁的方式呢?

撰写回答