h5py:在关闭()文件之前是否需要flush()?

时间:2018-02-09 18:41:11

标签: python h5py

标题包含以下问题:在Python HDF5库h5py中,我flush()之前是否需要close()文件?

或者关闭文件是否已确保可能仍在缓冲区中的任何数据都写入磁盘?

潮红究竟到底是什么意思?何时需要冲洗?

1 个答案:

答案 0 :(得分:5)

不,您不需要在关闭前刷新文件。关闭文件时,底层HDF5 C库会自动刷新。

关于潮红的问题。与内存或缓存访问相比,文件I / O很慢。如果程序必须等待每次执行写入时实际上在磁盘上的数据,那么这将减慢很多事情。因此,实际写入磁盘至少由OS缓冲,但在许多情况下由所使用的I / O库(例如,C标准I / O库)缓冲。当您要求将数据写入文件时,通常只是意味着操作系统已将数据复制到其自己的内部缓冲区,并且在方便的时候实际将其放在磁盘上。

Flushing会覆盖此缓冲,无论调用何种级别。因此调用h5py.File.flush()将刷新HDF5库缓冲区,但不一定是OS缓冲区。这一点的目的是让程序控制数据何时实际离开缓冲区。

例如,写入标准输出通常是行缓冲的。但如果您真的想在换行前看到输出,可以拨打fflush(stdout)。如果您将一个进程的标准输出传递给另一个进程,这可能是有意义的:下游进程可以立即开始消耗输入,而无需等待操作系统确定它是一个好时机。

另一个好例子是拨打fork(2)。这通常会复制进程的整个地址空间,这也意味着I / O缓冲区。这可能会导致重复输出,不必要的复制等。刷新流可以保证缓冲区在分叉之前是空的。