【发布时间】:2019-07-19 01:59:12
【问题描述】:
我尝试了一个简单的 h5py SWMR 模式示例,但出现了意外行为:
以下 writer 脚本使用 h5py 库的 Single-Writer-Multiple-Reader 模式写入 h5 文件:
import h5py
import time
print("Starting")
f = h5py.File('/mnt/c/files/temp.h5', 'w', libver='latest')
f.swmr_mode = True
ncols = 6
grp = f.create_group('test')
dset = grp.create_dataset('dat', chunks=(1,ncols), maxshape=(None,ncols), data=[[1]*ncols])
dset.flush()
print("Sleeping")
time.sleep(10)
f.close()
print("Closed")
当编写器脚本运行时,如果我们尝试使用以下命令从 h5 文件中读取:
import h5py
f = h5py.File("c:/files/temp.h5", 'r', libver='latest', swmr=True)
grps = list(f.keys())
print(grps)
if len(grps) > 0:
grp=f[grps[0]]
dsets = list(grp.keys())
print(dsets)
if len(dsets) > 0:
ds = grp[dsets[0]]
print(ds[:])
f.close()
我们在文件 f 中看不到任何键。
但是,一旦写入器完成运行并关闭文件,读取器就可以读取写入文件的数据。 SWMR 模式的重点是能够在写入器写入文件的同时进行读取。我是否正确实现了代码,还是库中存在错误?
【问题讨论】: