gpt4 book ai didi

python - Linux IPC : Locking, 但不是基于文件的锁定

转载 作者:太空狗 更新时间:2023-10-29 12:10:24 25 4
gpt4 key购买 nike

我需要一种方法来确保只有一个 python 进程正在处理一个目录。

锁/信号量应该是机器本地的(linux 操作系统)。

不涉及网络或 NFS。

我想避免基于文件的锁,因为我不知道我应该把锁文件放在哪里。

在 pypi 中有提供 posix IPC 的库。

没有第三方库就没有办法在 python 中使用 linux 信号量吗?

multiprocessing.Lock 提供的锁没有帮助,因为两个 python 解释器不共享同一个父级。

不涉及线程。所有进程只有一个线程。

我在 Linux 上使用 Python 2.7。

如何在 linux 上同步两个 python 脚本(没有基于文件的锁定)?

必需的功能:如果一个进程终止,则操作系统应释放锁/信号量。

最佳答案

flock 目录本身——这样你就永远不需要担心将锁定文件放在哪里:

import errno
import fcntl
import os
import sys

# This will work on Linux

dirfd = os.open(THE_DIRECTORY, os.O_RDONLY) # FIXME: FD_CLOEXEC
try:
fcntl.flock(dirfd, fcntl.LOCK_EX|fcntl.LOCK_NB)
except IOError as ex:
if ex.errno != errno.EAGAIN:
raise
print "Somebody else is working here; quitting." # FIXME: logging
sys.exit(1)

do_the_work()
os.close(dirfd)

关于python - Linux IPC : Locking, 但不是基于文件的锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47136965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com