首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux下如何锁定python进程间的目录?

问linux下如何锁定python进程间的目录?
EN

Stack Overflow用户
提问于 2015-09-16 02:00:23
回答 2查看 5.9K关注 0票数 6

我有两个(或更多)正在运行的python进程,希望为共享资源创建一个类似于exclusion mutex的概念。本例中的“共享资源”是一个目录。我怎样才能最容易/标准地/等实现互斥?每个进程都同意检查的隐藏.lock文件,如果存在,则将其PID附加为新行,然后在它们有权访问该文件时弹出其PID?

我基本上只是想清除一个目录,并确保在我清除它时没有其他进程试图对它进行读写。

有没有一种标准的linux方法可以做到这一点?也许我可以用python中的shell命令行来执行?

EN

回答 2

Stack Overflow用户

发布于 2015-09-18 19:30:31

Linux

在Linux中有两种标准的锁类型:advisory locking (在POSIX中指定)和mandatory locking (特定于Linux)。

但是,这两种方法只能应用于文件,而不能应用于目录。所以,是的,你需要一个锁文件。它假设所有用户都应该知道锁文件,并在访问目录之前获取锁。因此,强制锁定在这里没有帮助,您需要建议锁定。

Linux中有三种建议文件锁:

  • flock(2) (在POSIX中指定);
  • POSIX记录锁,请参阅fcntl(2)中的“建议记录锁定”部分以及lockf(3)包装器(两者都在POSIX中指定);
  • 打开文件描述锁,请参阅fcntl(2) (特定于Linux,在最近的内核中可用)。

Python

在Python中,通过fcntl模块可以使用flock()、lockf()和fcntl()函数。还有一个向fcntl.flock函数添加上下文管理器支持的flock模块。

下面是一个示例:

代码语言:javascript
复制
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实现支持强制目录锁的文件系统可能是可能的,但我不知道这样的实现。

票数 3
EN

Stack Overflow用户

发布于 2019-03-06 05:07:56

您可以在目录上应用群集。这是建议性的(它不会停止那些不关心锁接触目录的进程)。该锁将一直存在,直到程序终止。代码非常简单。

代码语言:javascript
复制
lockfd = os.open('.',os.O_RDONLY)
fcntl.flock(lockfd,fcntl.LOCK_EX | fcntl.LOCK_NB)

如果我对手册页的理解是正确的,你可以通过简单的操作来解锁它。

代码语言:javascript
复制
os.close(lockfd)

但我还没有测试过这一点,因为在我的应用程序中,希望锁在整个脚本运行期间都保持不变。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32592698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档