python - 如何创建系统范围的文件锁?

标签 python linux macos file locking

我试图让许多独立的进程使用系统范围的锁来协调它们对文件的写入(参见此处:Concurrent file accesses from different scripts python)

锁需要跨越整个系统,因为进程是在不同的时间独立产生的。这里:System-wide mutex in Python on Linux我读到 fcntl.lockf 应该做我想做的事,但我无法让它工作。这是我尝试过的:

1 号航站楼

>>> import fcntl
>>> f = open('myfile', 'w')
>>> fcntl.lockf(f, fcntl.LOCK_EX)
[Detach from terminal]

2 号航站楼

>>> f = open('myfile', 'w')
>>> f.write('hello')
5
>>> f.close()
[Detach from terminal]

如果我检查文件,它包含“hello”。所以没有锁!我做错了什么?我试过 ubuntu16.04 和 macOS High sierra,得到了相同的结果。我正在使用 python 3.6

最佳答案

*NIX 支持对文件(或部分文件)应用锁定。它需要进程相互协作(建议锁定)。每个进程都应该在访问给定文件或记录之前始终检查它是否被锁定。如果不执行此检查,则没有内置保护来避免可能的损坏。所以在你的情况下,两个进程都必须使用文件锁定才能工作。

尽管在进程退出或文件关闭时锁会自动释放,但明确使用 LOCK_UN(解锁)是个好主意,如果只是记录的话。

关于python - 如何创建系统范围的文件锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48172139/

相关文章:

linux - cURL 文件上传 - "No File Provided"

linux - 从 Linux 命令行生成 SHA-256 哈希

python - setup.py 可以使用 pip 而不是 easy_install 吗?

python - 获取两行都不是 NaN 的索引

linux - 使用 bash 根据其他文件中的范围划分文件

mysql - MAMP - 导入 Drupal 数据库 - [#2006 - MySQL 服务器已消失]

objective-c - Fabric macOS 异常有时没有被捕获?

ios - 这是 NSIndexSet enumerateIndexesUsingBlock 中的错误吗?

python - 扭曲或 celery ?哪个适合我的具有大量 SOAP 调用的应用程序?

Python库安装