我需要在 f.close() 之前 os.fsync() 吗?
Do I need to os.fsync() before f.close()?
"what exactly the python's file.flush() is doing?" 说你应该先 f.flush()
然后 os.fsync(f)
以确保数据写入磁盘。
此外,"does close() imply flush() in Python?" 声称 f.close()
意味着 flush()
。
现在,问题是:我应该做什么
os.fsync(f)
f.close()
或者,f.close()
是否也意味着 os.fsync()
?
这是doc of Python IO, the doc of Python file close, and the source code。快速搜索 'fsync' 未返回任何相关信息。
我已经尝试了 os.fsync() 然后是 f.close() 和 os.fsync()。两者都将给出相同的立即数据写入文件的结果。尽管主电源插座突然断电并稍后重新通电,但仍使用任一方法更新文件。
因此,当有 os.fsync() 时,f.close() 不是必需的。
我通过 stracing 测试脚本检查了自己,不,它并不意味着 fsync。
f.close() 意味着 f.flush() 因为它必须这样做。 f.flush() 写入内部
(user space) 缓冲到关联的文件描述符,关闭后无法写入文件描述符。然而,写入内核缓冲区并不能保证持久性,这就是 fsync 发挥作用的地方。
"what exactly the python's file.flush() is doing?" 说你应该先 f.flush()
然后 os.fsync(f)
以确保数据写入磁盘。
此外,"does close() imply flush() in Python?" 声称 f.close()
意味着 flush()
。
现在,问题是:我应该做什么
os.fsync(f)
f.close()
或者,f.close()
是否也意味着 os.fsync()
?
这是doc of Python IO, the doc of Python file close, and the source code。快速搜索 'fsync' 未返回任何相关信息。
我已经尝试了 os.fsync() 然后是 f.close() 和 os.fsync()。两者都将给出相同的立即数据写入文件的结果。尽管主电源插座突然断电并稍后重新通电,但仍使用任一方法更新文件。
因此,当有 os.fsync() 时,f.close() 不是必需的。
我通过 stracing 测试脚本检查了自己,不,它并不意味着 fsync。 f.close() 意味着 f.flush() 因为它必须这样做。 f.flush() 写入内部 (user space) 缓冲到关联的文件描述符,关闭后无法写入文件描述符。然而,写入内核缓冲区并不能保证持久性,这就是 fsync 发挥作用的地方。