我试图让许多独立的进程使用系统范围的锁来协调它们对文件的写入(参见此处: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/