我需要在 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 发挥作用的地方。