一个Python进程将状态更新写入一个文件以供其他进程读取。在某些情况下,状态更新在循环中重复且快速地发生。最简单和最快的方法是使用open().write()在一行中:
open(statusfile,'w').write(status)
另一种方法是用四条线将数据强制送到磁盘。这将导致严重的性能损失:
f = open(self.statusfile,'w')
f.write(status)
os.fsync(f)
f.close()
我不是想保护自己不受操作系统崩溃的影响。那么,这种方法是否将数据强制到操作系统缓冲区,以便其他进程在从磁盘打开文件时读取最新的状态数据?或者,我需要使用os.fsync()吗?
自从Python2.2以来,就有可能对语言的内置类型进行子类化。这意味着您可以派生自己的
file
类型,其write()
方法返回self
,而不是像内置版本那样。这样做还可以将一个close()
方法调用链接到一行代码的末尾。不,第一种方法不能保证数据被写出,因为一旦句柄不再被其
write
成员引用,就不能保证文件将被刷新和关闭。CPython可能就是这样,但不一定是其他Python解释器;它是Python垃圾收集器的实现细节。您应该真正使用第二种方法,除了不需要
os.fsync
;只需关闭文件,数据就应该可用于其他进程。或者,更好(Python >=2.5):
with
版本是异常安全的:即使write
失败,也会关闭文件。相关问题 更多 >
编程相关推荐