在 h5py 中,我需要在关闭文件之前调用 flush() 吗?
In h5py, do I need to call flush() before I close a file?
在 Python HDF5 库 h5py
中,我是否需要 flush()
一个文件才能 close()
它?
或者关闭文件是否已经确保可能仍在缓冲区中的任何数据都将写入磁盘?
冲洗的重点是什么?什么时候需要冲洗?
不,您不需要在关闭前刷新文件。当您关闭文件时,底层 HDF5 C 库会自动完成刷新。
至于冲水点。与内存或高速缓存访问相比,文件 I/O 速度较慢。如果每次执行写入时程序都必须等待数据实际在磁盘上,这会大大降低速度。因此,实际写入磁盘至少由 OS 缓冲,但在许多情况下由正在使用的 I/O 库缓冲(例如,C 标准 I/O 库)。当你要求将数据写入文件时,通常只是意味着 OS 已经将你的数据复制到它自己的内部缓冲区,并在方便的时候实际将它放在磁盘上。
刷新覆盖此缓冲,无论调用级别如何。因此调用 h5py.File.flush()
将刷新 HDF5 库缓冲区,但不一定刷新 OS 缓冲区。这样做的目的是让程序可以控制数据何时真正离开缓冲区。
例如,写入标准输出通常是行缓冲的。但是如果你真的想在换行符之前看到输出,你可以调用 fflush(stdout)
。如果您将一个进程的标准输出传输到另一个进程,这可能是有意义的:下游进程可以立即开始使用输入,而无需等待 OS 决定是时候了。
另一个很好的例子是调用 fork(2)
。这通常会复制进程的整个地址 space,这也意味着 I/O 缓冲区。这可能会导致重复输出、不必要的复制等。刷新流可保证缓冲区在分叉之前为空。
在 Python HDF5 库 h5py
中,我是否需要 flush()
一个文件才能 close()
它?
或者关闭文件是否已经确保可能仍在缓冲区中的任何数据都将写入磁盘?
冲洗的重点是什么?什么时候需要冲洗?
不,您不需要在关闭前刷新文件。当您关闭文件时,底层 HDF5 C 库会自动完成刷新。
至于冲水点。与内存或高速缓存访问相比,文件 I/O 速度较慢。如果每次执行写入时程序都必须等待数据实际在磁盘上,这会大大降低速度。因此,实际写入磁盘至少由 OS 缓冲,但在许多情况下由正在使用的 I/O 库缓冲(例如,C 标准 I/O 库)。当你要求将数据写入文件时,通常只是意味着 OS 已经将你的数据复制到它自己的内部缓冲区,并在方便的时候实际将它放在磁盘上。
刷新覆盖此缓冲,无论调用级别如何。因此调用 h5py.File.flush()
将刷新 HDF5 库缓冲区,但不一定刷新 OS 缓冲区。这样做的目的是让程序可以控制数据何时真正离开缓冲区。
例如,写入标准输出通常是行缓冲的。但是如果你真的想在换行符之前看到输出,你可以调用 fflush(stdout)
。如果您将一个进程的标准输出传输到另一个进程,这可能是有意义的:下游进程可以立即开始使用输入,而无需等待 OS 决定是时候了。
另一个很好的例子是调用 fork(2)
。这通常会复制进程的整个地址 space,这也意味着 I/O 缓冲区。这可能会导致重复输出、不必要的复制等。刷新流可保证缓冲区在分叉之前为空。