tah*_*oar 8 python file-io operating-system
一个Python进程将状态更新写入文件以供其他进程读取.在某些情况下,状态更新会在循环中重复且快速地发生.最简单快捷的方法是在一行中使用open().write():
open(statusfile,'w').write(status)
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用四行强制数据到磁盘.这会显着降低性能:
f = open(self.statusfile,'w')
f.write(status)
os.fsync(f)
f.close()
Run Code Online (Sandbox Code Playgroud)
我不是想避免操作系统崩溃.那么,该方法是否会将数据强制到OS缓冲区,以便其他进程在从磁盘打开文件时读取最新的状态数据?或者,我需要使用os.fsync()吗?
Fre*_*Foo 12
不,第一种方法不保证数据被写出,因为一旦句柄不再被其write成员引用,就不能保证文件将被刷新和关闭.这可能是CPython的情况,但不一定与其他Python解释器一样; 它是Python垃圾收集器的实现细节.
您应该使用第二种方法,除非os.fsync不需要; 只需关闭文件,数据应该可供其他进程使用.
或者,甚至更好(Python> = 2.5):
with open(self.statusfile, 'w') as f:
f.write(status)
Run Code Online (Sandbox Code Playgroud)
该with版本是异常安全的:即使write失败,文件也会关闭.