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

时间:2018-01-09 16:01:35

标签: 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

1 个答案:

答案 0 :(得分:2)

* NIX支持将锁应用于文件(或文件的一部分)。它要求流程相互合作(咨询锁定)。在访问之前,每个进程应始终检查给定文件或记录是否已锁定。如果未执行此检查,则没有内置保护以避免可能的损坏。因此,在您的情况下,两个进程都必须使用文件锁定才能工作。

如果只是纪录片,最好明确使用LOCK_UN(解锁),尽管在进程退出或文件关闭时会自动释放锁。