为什么并行分配h5py数据集没有输出?

Why is there no output in parallel assignment of h5py dataset?

我正在尝试从并行运行的代码生成一个 hdf5 数据集,但是当我读取生成的数据集时,它是空白的,所有条目都是零。

我已经用顺序 for 循环替换了并行代码,在这种情况下数据集运行良好,但我不知道并行执行相同操作有什么问题。

这是一个最小示例的代码

import h5py
import scipy.stats as st

file = h5py.File('test.hdf5','a')

dset = file.create_dataset('x', (10,1024), maxshape=(None,1024), 
                           dtype='float32')

def assign(j):
    dset[j,:] = st.norm.rvs(0.,1.,1024)

from joblib import Parallel, delayed
import multiprocessing as mp

Parallel(n_jobs=4)(delayed(assign)(j) for j in range(10))

file.close()

稍后用

读取文件
import h5py

file = h5py.File('test.hdf5','r')
file['x'][:]

并行代码 运行 有什么问题?

您的并行代码的每个线程都有自己的 dset 副本,并且它们不断地踩着彼此的脚趾。你可以尝试这样的事情来让它工作:

def get_row(x) :
    return st.norm.rvs(0.,1.,1024)

dset[:,:] = Parallel(n_jobs=4)(delayed(get_row)(j) for j in range(10))

ps。感谢@gapollo 的指正!