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

我有两个(或更多) 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实现文件系统,但我不知道这样的实现.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...