在h5py中,我在关闭文件之前需要调用flush()吗?

问题描述 投票:4回答:1

在Python HDF5库h5py中,我在flush()文件之前是否需要close()一个文件?

或者关闭文件是否已经确保所有仍在缓冲区中的数据都将被写入磁盘?

冲洗的确切目的是什么?什么时候需要冲洗?

python h5py
1个回答
5
投票

否,关闭前不需要刷新文件。关闭文件时,基础的HDF5 C库会自动完成刷新。


关于冲洗点。与内存或缓存访问相比,文件I / O速度较慢。如果程序每次执行写入操作之前都必须等待数据实际上在磁盘上,那将使速度大大降低。因此,实际写入磁盘至少要由OS缓冲,但在许多情况下是由所使用的I / O库(例如C标准I / O库)缓冲的。当您要求将数据写入文件时,通常仅表示操作系统已将数据复制到其自己的内部缓冲区,并在方便时将其实际放置在磁盘上。

刷新会覆盖此缓冲,无论在哪个级别进行调用。因此,调用h5py.File.flush()将刷新HDF5库缓冲区,但不一定刷新OS缓冲区。这样做的目的是使程序可以控制何时数据实际离开缓冲区。

例如,写入标准输出通常是行缓冲的。但是,如果您真的想在换行符之前看到输出,则可以调用fflush(stdout)。如果将一个进程的标准输出传递到另一个进程中,这可能是有道理的:下游进程可以立即开始使用输入,而不必等待操作系统确定是时候了。

[另一个很好的例子是呼叫fork(2)。这通常会复制进程的整个地址空间,这也意味着I / O缓冲区。这可能会导致输出重复,不必要的复制等。刷新流可确保在派生之前缓冲区为空。

© www.soinside.com 2019 - 2024. All rights reserved.