gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:40:34 26 4
gpt4 key购买 nike

我有两个(或更多)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 获得。模块。还有flockfcntl.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

附言。

使用这种方法,如果随机进程不知道您的锁定文件,则无法阻止它访问您的目录。使用 FUSE 可能会实现一个文件系统它将支持强制目录锁,但我不知道这样的实现。

关于python - 如何在 linux 中锁定 python 进程之间的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32592698/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com