标题包含以下问题:在Python HDF5库h5py
中,我flush()
之前是否需要close()
文件?
或者关闭文件是否已确保可能仍在缓冲区中的任何数据都写入磁盘?
潮红究竟到底是什么意思?何时需要冲洗?
答案 0 :(得分:5)
不,您不需要在关闭前刷新文件。关闭文件时,底层HDF5 C库会自动刷新。
关于潮红的问题。与内存或缓存访问相比,文件I / O很慢。如果程序必须等待每次执行写入时实际上在磁盘上的数据,那么这将减慢很多事情。因此,实际写入磁盘至少由OS缓冲,但在许多情况下由所使用的I / O库(例如,C标准I / O库)缓冲。当您要求将数据写入文件时,通常只是意味着操作系统已将数据复制到其自己的内部缓冲区,并且在方便的时候实际将其放在磁盘上。
Flushing会覆盖此缓冲,无论调用何种级别。因此调用h5py.File.flush()
将刷新HDF5库缓冲区,但不一定是OS缓冲区。这一点的目的是让程序控制数据何时实际离开缓冲区。
例如,写入标准输出通常是行缓冲的。但如果您真的想在换行前看到输出,可以拨打fflush(stdout)
。如果您将一个进程的标准输出传递给另一个进程,这可能是有意义的:下游进程可以立即开始消耗输入,而无需等待操作系统确定它是一个好时机。
另一个好例子是拨打fork(2)
。这通常会复制进程的整个地址空间,这也意味着I / O缓冲区。这可能会导致重复输出,不必要的复制等。刷新流可以保证缓冲区在分叉之前是空的。