HDF5 Python-处理多进程读取的正确方法?

HDF5 Python-处理多进程读取的正确方法?,python,hdf5,h5py,Python,Hdf5,H5py,我有一个图像生成器,可以从HDF5文件(通过h5py)读取一批3D张量,它使用Python多处理库(继承自Keras序列) 我想了解我是否做得正确,以及我是否可以改进这一点 我有一个\uuuu getitem\uuuu方法,由多个进程在N次迭代中调用,每次调用该方法时,我打开一个HDF5文件,读取给定索引集的一批数据,并立即关闭该文件(通过上下文管理器) 这种方法看起来没有问题,但我真的不确定。我读到,当从多个进程读取文件时,我们可能会看到奇怪的东西和损坏的数据 我看到有MPI接口和SWMR模式

我有一个图像生成器,可以从HDF5文件(通过h5py)读取一批3D张量,它使用Python多处理库(继承自Keras序列)

我想了解我是否做得正确,以及我是否可以改进这一点

我有一个
\uuuu getitem\uuuu
方法,由多个进程在N次迭代中调用,每次调用该方法时,我打开一个HDF5文件,读取给定索引集的一批数据,并立即关闭该文件(通过上下文管理器)

这种方法看起来没有问题,但我真的不确定。我读到,当从多个进程读取文件时,我们可能会看到奇怪的东西和损坏的数据

我看到有MPI接口和SWMR模式


我能从这些功能中受益吗

这不是一个确定的答案,但对于压缩数据,我今天遇到了问题,在寻找此修复程序时发现了您的问题:将python文件对象提供给h5py而不是文件名,您可以绕过一些问题,通过多处理读取压缩数据

    # using the python file-open overcomes some complex problem
    with h5py.File( open(self.src, "rb"), "r" ) as hfile:
        # grab the data from hfile
        groups = list(h['/']) # etc

据我所知,hdf正试图“优化”压缩(分块)数据的磁盘IO。如果多个进程试图读取相同的块,您可能不希望为每个进程解压它们。这造成了混乱。使用python文件对象,我们可以希望库不再知道进程正在查看相同的数据,并停止尝试提供帮助。

谢谢,伙计,这是个聪明的主意
    # using the python file-open overcomes some complex problem
    with h5py.File( open(self.src, "rb"), "r" ) as hfile:
        # grab the data from hfile
        groups = list(h['/']) # etc