python如何确保文件改动内容已经写入磁盘

背景:两个业务流程基于共享文件系统进行交互,A流程改动文件后,保存文件,通知B流程开始(通过业务编排系统或者直接调用B的接口进行通知)。 B流程开始读取该文件进行处理,偶发的B发现文件不完整,或者文件大小为0。

A 和B 是运行不同pod中的程序。 都挂在的该共享存储的盘, A写入后,B读取处理,再向下流转。

分析:问题是偶发的, 通过长期观察日志,有时发生问题的是A新写的文件相对较大,或者此时有A有好多写文件的操作,并且A刚close文件,立刻通知B开始操作。基本B读取文件是在A close文件后的不到1毫秒开始的。
  经过确认A的文件确定调用close的方法的,A流程使用python开发,通过 with open as 方式读写文件的。
   查看linux文件的读写过程,发现flush只能确保程序对文件的改动会进入的所在os的page cache中,并不会一定立刻写入到磁盘中,具体何时写入到磁盘中取决于操作系统。
   而我们使用的共享文件系统,A流程虽然调用close,但是文件改动不应此时就save to disk,所以B流程该文件时候,可能发生读取的文件不完整的。 A和B位于不同机器,没法共享page cache。

具体解决办法:所有通过 with open 或者write方法写入文件的地方,在后面统一调用os.sync 或者os.fsync()

    with 

你可能感兴趣的:(python,python)