我有一段代码(python 3.7)如下:
import os, fcntl
with open("testfile", 'w') as tf:
fcntl.lockf(tf.fileno(), fcntl.LOCK_EX | fcntl.lock_NB)
... some code that does some stuff ...
tf.write("%s got here first!!" % (os.getpid())
fcntl.lockf(tf.fileno(), fcntl.LOCK_UN)
对于io
和open
(内置函数)中的documentation,IOBase还是一个上下文管理器,可确保在with
语句后关闭文件。套件完成,即使发生异常。
现在,假设我们有两个运行该代码的进程(不是线程)p1,p2。
p1首先到达那里,并且对该文件具有排他锁,因此p2抛出了IOError。在这种情况下,我有三个问题:
fcntl.lockf
之后执行代码,还是只退出with
语句的代码块并调用文件对象的__exit__
方法?open
模式'w'
来访问文件,因此当p1和p2在其内存中创建文件对象时,文件都会被p1和p2截断。我希望仅在进程首先进入文件时才会发生这种情况?我找不到办法
首先以'w'
模式独占打开文件,然后将其锁定。谢谢!