我需要在 f.close() 之前 os.fsync() 吗?

Dan*_*hin 5 python io flush fsync

“python 的 file.flush() 到底在做什么?” 说你应该首先f.flush()然后os.fsync(f)确保数据写入磁盘。
此外,“在 Python 中,close() 是否意味着 flush()?” 声称f.close()意味着flush()

现在,问题是:我应该做

os.fsync(f)
f.close()
Run Code Online (Sandbox Code Playgroud)

或者,f.close()也意味着os.fsync()?

下面是Python的IO的文档中,Python的文件关闭的文档,和源代码。快速搜索“fsync”未返回任何相关信息。

Luc*_*mer 3

我通过跟踪测试脚本检查了自己,不,它并不意味着 fsync。f.close() 意味着 f.flush(),因为它必须这样做。f.flush() 将内部(用户空间)缓冲区写入关联的文件描述符,并且在关闭文件描述符后无法写入文件描述符。然而,写入内核缓冲区并不能保证持久性,这就是 fsync 发挥作用的地方。

  • @DanielChin 关闭系统很可能也会使所有内核 I/O 缓冲持久,但为了安全起见,您可能应该在假设没有重大性能问题的情况下强制执行 fsync。:) (2认同)