加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

如何在linux中的python进程之间锁定目录?

发布时间:2020-12-14 01:43:52 所属栏目:Linux 来源:网络整理
导读:我有两个(或更多) python进程在运行,并且想要为共享资源创建类似于 exclusion mutex的概念.在这种情况下,“共享资源”是一个目录.我最容易/标准地/等等如何实现互斥锁?每个进程同意检查的隐藏.lock文件,如果存在,则将其PID作为新行附加,然后在有权访问该文
我有两个(或更多) python进程在运行,并且想要为共享资源创建类似于 exclusion mutex的概念.在这种情况下,“共享资源”是一个目录.我最容易/标准地/等等如何实现互斥锁?每个进程同意检查的隐藏.lock文件,如果存在,则将其PID作为新行附加,然后在有权访问该文件时弹出它们的PID?

我基本上只是想清除一个目录,并确保在我清除它时没有其他进程尝试读取或写入它.

是否有标准的linux方式这样做?也许我可以用python的shell行执行某些操作?

解决方法

Linux的

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

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

Linux中有三种咨询文件锁:

> flock(2)(在POSIX中指定);
> POSIX记录锁,请参阅fcntl(2)中的“咨询记录锁定”部分以及lockf(3)包装器(均在POSIX中指定);
>打开文件描述锁,请参阅fcntl(2)(特定于Linux,在最近的内核中可用).

Python

在Python中,flock(),lockf()和fcntl()函数可通过fcntl模块获得.还有flock模块为fcntl.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实现文件系统,但我不知道这样的实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读