[英]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.