Python文件缓冲区存储在哪里?

2024-09-27 07:21:21 发布

您现在位置:Python中文网/ 问答频道 /正文

最近实现了一个文件格式API,并且想知道为什么文件大小直到close()才更新。进行了一些搜索,发现内容被写入缓冲区,直到调用close()。我想看看是否可以在调用写操作时更新文件大小,因此我抛出了一个flush()调用,但除非调用os.fsync(),否则什么也做不了

对于API来说,速度就是一切。用os.fsync()调用flush()速度较慢,因为现在正在进行磁盘写入。事实证明,它的速度慢了近2倍,因此使用缓冲区并等待close()会更好。但是,其中一些文件可能会变得相当大,需要考虑内存。出于这个原因,我本以为将缓冲区清除到磁盘是最好的,直到我注意到~4GB缓冲区甚至没有出现在内存中。我在监视编写4GB文件的过程,内存使用从未增加;事实上,总体记忆从未增加。监视磁盘显示在调用close()之前发生的写操作,但操作系统不知道文件大小增加了

那么,在写入磁盘之前,这些缓冲区在哪里存储这些信息呢

编辑:

通过进一步研究,我发现了以下几点:

  • io.DEFAULT_BUFFER_SIZE是8192字节
  • 似乎CPython使用了内部buffers

我不熟悉这个级别的文件I/o,但我猜当内部缓冲区被填满时,它会“传输”到操作系统的缓冲区,然后写入磁盘。但是,即使文件已写入磁盘,操作系统也不会更新其文件视图(即文件大小/属性),直到流关闭


Tags: 文件内存api内容closeos过程原因

热门问题