python的file.flush()到底在做什么?

python的file.flush()到底在做什么?

我在文件对象的Python 文档中找到了这个:

flush()不一定将文件的数据写入磁盘。使用flush()后跟os.fsync()来确保此行为。

所以我的问题是:Python到底在flush做什么?我认为它强制将数据写入磁盘,但现在我发现它没有。为什么?


FFIVE
浏览 1683回答 3
3回答

互换的青春

通常涉及两个级别的缓冲:内部缓冲区操作系统缓冲区内部缓冲区是由您编程的运行时/库/语言创建的缓冲区,旨在通过避免每次写入的系统调用来加快速度。相反,当您写入文件对象时,您会写入其缓冲区,并且只要缓冲区填满,就会使用系统调用将数据写入实际文件。但是,由于操作系统缓冲区,这可能并不意味着数据被写入磁盘。它可能只是意味着数据从运行时维护的缓冲区复制到操作系统维护的缓冲区中。如果您写了一些内容,并且它最终在缓冲区中(仅限),并且电源被切断到您的机器,那么当机器关闭时,该数据不在磁盘上。因此,为了帮助您拥有flush和fsync方法,在各自的对象上。第一个,flush只是将程序缓冲区中的任何数据写入实际文件。通常,这意味着数据将从程序缓冲区复制到操作系统缓冲区。具体来说,这意味着如果另一个进程打开同一个文件进行读取,它将能够访问刚冲刷到该文件的数据。但是,它并不一定意味着它已“永久”存储在磁盘上。为此,您需要调用os.fsync确保所有操作系统缓冲区与其所用存储设备同步的方法,换句话说,该方法将数据从操作系统缓冲区复制到磁盘。通常情况下,您不需要为任何一种方法而烦恼,但是如果您处于一种偏执,关于实际上最终存在于磁盘上的内容是一件好事,您应该按照指示进行两次调用。请注意,具有缓存机制的磁盘现在比2013年更常见,因此现在涉及更多级别的缓存和缓冲区。我假设这些缓冲区也将由同步/刷新调用处理,但我真的不知道。

青春有我

因为操作系统可能不会这样做。刷新操作强制将文件数据放入RAM中的文件高速缓存中,从那里开始实际将操作系统发送到磁盘。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python