将数据写入临时文件,并且在成功写入数据后,将文件重命名为正确的目标文件,例如
f = open(tmpFile, 'w')
f.write(text)
# make sure that all data is on disk
# see http://stackoverflow.com/questions/7433057/is-rename-without-fsync-safe
f.flush()
os.fsync(f.fileno())
f.close()
os.rename(tmpFile, myFile)
根据文档http://docs.python.org/library/os.html#os.rename
如果成功,重命名将是原子操作(这是POSIX要求)。在Windows上,如果dst已经存在,即使它是一个文件,也会引发OSError;当dst命名现有文件时,可能无法实现原子重命名
也
如果src和dst在不同的文件系统上,则该操作在某些Unix风格上可能会失败。
注意:
如果src和dest位置不在同一文件系统上,则可能不是原子操作
os.fsync
如果在电源故障,系统崩溃等情况下,性能/响应能力比数据完整性更重要,则可以跳过该步骤