Python 如何并行化写入h5文件的数据?

Python 如何并行化写入h5文件的数据?,python,hdf5,h5py,mpi4py,Python,Hdf5,H5py,Mpi4py,我对h5py/mpi4py非常陌生。我试图将一些数据写入一个.h5文件,这样,如果rank==0阳性测试数据(阳性数据集)值将被写入,如果rank==1阴性测试数据(阴性数据集)值将被写入,则有两个进程处于这种状态。但是当我试着和你一起跑的时候 mpiexec -n 2 python parallel_exec.py 我要走了 IOError:无法创建文件(无法锁定文件,错误号=11,错误消息='资源暂时不可用') 有人能帮我解决这个问题吗 from mpi4py import MPI

我对
h5py/mpi4py
非常陌生。我试图将一些数据写入一个.h5文件,这样,如果
rank==0
阳性测试数据(阳性数据集)值将被写入,如果
rank==1
阴性测试数据(阴性数据集)值将被写入,则有两个进程处于这种状态。但是当我试着和你一起跑的时候

mpiexec -n 2 python parallel_exec.py
我要走了

IOError:无法创建文件(无法锁定文件,错误号=11,错误消息='资源暂时不可用')

有人能帮我解决这个问题吗

    from mpi4py import MPI
    import h5py

    rank = MPI.COMM_WORLD.rank
    f = h5py.File('parallel.hdf5', 'w')
    f.create_dataset('face_val', (num_pos_imgs + num_neg_imgs, 1), np.int)
    f.create_dataset('eye_val', (num_pos_imgs + num_neg_imgs, 2), np.float32)

    hdf5_index = 0
    if rank == 0:
      for i in enumerate(negative_images):
        f['face_val'][hdf5_index, ...] = 0
        f['eye_val'][hdf5_index, ...] = (magick_number, magick_number)
        hdf5_index += 1
    elif rank == 1:
      for i in enumerate(positive_images):
        f['face_val'][hdf5_index, ...] = 1
        f['eye_val'][hdf5_index, ...] = (magick_number_positive, magick_number_positive)
        hdf5_index += 1
预期:

在2个进程中并行运行hdf5并输出结果.hdf5文件

得到:

IOError:无法创建文件(无法锁定文件,错误号=11,错误消息='资源暂时不可用')


h5py文档中对此进行了说明。它指出HDF5必须使用
--enable parallel--enable shared
选项构建。此外,h5py必须在“MPI模式”下编译。最后,当您使用h5py打开文件时,您需要
driver='mpio',comm=MPI.comm_WORLD
参数。在此处获取详细信息:@kcw78我已使用中所述的选项构建了HDF5,并尝试了该示例程序。示例程序运行良好,但我希望在代码中实现相同的功能。是否将mpi参数添加到
h5py.File()
函数调用:
driver='mpio',comm=mpi.comm_WORLD
?(如h5py示例所示)h5py文档对此进行了说明。它指出HDF5必须使用
--enable parallel--enable shared
选项构建。此外,h5py必须在“MPI模式”下编译。最后,当您使用h5py打开文件时,您需要
driver='mpio',comm=MPI.comm_WORLD
参数。在此处获取详细信息:@kcw78我已使用中所述的选项构建了HDF5,并尝试了该示例程序。示例程序运行良好,但我希望在代码中实现相同的功能。是否将mpi参数添加到
h5py.File()
函数调用:
driver='mpio',comm=mpi.comm_WORLD
?(如h5py示例所示)