Python h5py swmr模式:编写器打开文件时无法读取数据

时间:2018-08-30 09:24:44

标签: python h5py

我尝试了一个简单的h5py SWMR模式示例,并得到了意外的行为:

以下编写器脚本使用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模式的重点是能够在编写器写入文件时同时读取。我是在正确执行代码吗,还是库中有错误?

1 个答案:

答案 0 :(得分:1)

我相信您的问题是,您将swmr_mode设置为ture之后正在调用create_dataset。

来自http://docs.h5py.org/en/stable/swmr.html

  • 在SWMR模式下无法创建新的组和数据集。