我有两个(或更多)python进程正在运行,并且希望创build一个与共享资源的排除互斥体类似的概念。 在这种情况下,“共享资源”是一个目录。 我怎样才能最简单/标准/等实施一个互斥体? 一个隐藏的.lock
文件,每个进程同意检查,如果存在,将它们的PID作为新行添加,然后在访问文件时popup它们的PID。
我基本上只是想清除一个目录,并确保没有其他进程试图读取或写入,而我清除它。
有没有一个标准的Linux方式做到这一点? 也许我可以用python的shell行执行一些东西?
Linux的
在Linux中有两种标准的锁定类型: 建议锁定 (在POSIX中指定)和强制锁定 (特定于Linux)。
但是,它们可能只适用于文件,而不适用于目录。 所以是的,你需要一个锁定文件。 它假定所有用户都应该知道锁文件并获取锁之前访问目录。 因此,强制锁定在这里不起作用,你需要建议锁定。
Linux中有三种咨询文件锁:
flock(2)
(在POSIX中指定); fcntl(2)
“通知记录锁定”部分以及lockf(3)
包装(均在POSIX中指定); fcntl(2)
(特定于Linux,在最近的内核中可用)。 蟒蛇
在Python中,通过fcntl
模块可以使用flock()
, lockf()
和fcntl()
函数。 fcntl.flock
函数还增加了上下文管理器支持的flock
模块。
这里是一个例子:
import flock with open('/my/dir/lockfile', 'w') as fp: with flock.Flock(fp, flock.LOCK_EX) as lock: pass # exclusive lock is acquired here
PS。
使用这种方法,如果不知道锁定文件,则无法阻止随机进程访问您的目录。 使用FUSE实现一个文件系统可能会支持强制目录锁定,但是我不知道这样的实现。