您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使文件创建成为原子操作?

如何使文件创建成为原子操作?

将数据写入临时文件,并且在成功写入数据后,将文件重命名为正确的目标文件,例如

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 如果在电源故障,系统崩溃等情况下,性能/响应能力比数据完整性更重要,则可以跳过该步骤

其他 2022/1/1 18:27:48 有427人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶