簡體   English   中英

為什么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副本,並且它們不斷地相互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))

附: 感謝@gapollo 的更正!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM