Python Linux IPC:锁定,但不是基于文件的锁定
我需要一种方法来确保只有一个python进程在处理一个目录 锁/信号量应该是机器本地的(linux操作系统) 不涉及网络或NFS 我希望避免使用基于文件的锁,因为我不知道应该将锁文件放在哪里 在pypi上有提供posix IPC的库 在没有第三方库的情况下,是否无法将linux信号量与python一起使用 由multiprocessing.lock提供的锁没有帮助,因为两个python解释器不共享同一个父级 不涉及线程。所有进程只有一个线程 我正在linux上使用Python 2.7 如何在linux上同步两个python脚本(无需基于文件的锁定) 必需的特性:如果一个进程死亡,那么操作系统应该释放锁/信号量 我希望避免使用基于文件的锁,因为我不知道应该将锁文件放在哪里 您可以锁定现有文件或目录(正在处理的文件或目录) 必需的特性:如果一个进程死亡,那么操作系统应该释放锁/信号量 这正是文件锁的工作原理。将目录本身聚集起来,这样您就不必担心锁文件放在哪里:Python Linux IPC:锁定,但不是基于文件的锁定,python,linux,ipc,python-multiprocessing,Python,Linux,Ipc,Python Multiprocessing,我需要一种方法来确保只有一个python进程在处理一个目录 锁/信号量应该是机器本地的(linux操作系统) 不涉及网络或NFS 我希望避免使用基于文件的锁,因为我不知道应该将锁文件放在哪里 在pypi上有提供posix IPC的库 在没有第三方库的情况下,是否无法将linux信号量与python一起使用 由multiprocessing.lock提供的锁没有帮助,因为两个python解释器不共享同一个父级 不涉及线程。所有进程只有一个线程 我正在linux上使用Python 2.7 如何在li
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)
这可能有助于创建原子目录,因此您可以尝试创建一个名为
的隐藏目录,除非您通过删除它来解除锁定,否则其他任何人都无法成功…@MarkSetchell我正在搜索编程语言python的解决方案。@MarkSetchell创建目录不是一个解决方案。我更新了问题:必需的特性:如果一个进程死亡,那么锁/信号应该由操作系统释放。好的,这一次有效,因为在这种情况下我有一个目录。我很好奇。。。没有目录就无法进行锁定吗?