Python h5py режим SWMR: не может прочитать данные, когда писатель имеет открытый файл - PullRequest
0 голосов
/ 30 августа 2018

Я попробовал простой пример режима SWMR h5py и получил неожиданное поведение:

Следующий сценарий записи выполняет запись в файл h5 с использованием режима Single-Writer-Multiple-Reader библиотеки h5py:

    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 голосов
/ 18 июля 2019

Я считаю, что ваша проблема в том, что вы вызываете create_dataset после установки swmr_mode в значение ture.

от http://docs.h5py.org/en/stable/swmr.html

  • новые группы и наборы данных не могут быть созданы в режиме SWMR.
...