Я попробовал простой пример режима 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 заключается в том, чтобы иметь возможность одновременно читать, пока пишущий записывает в файл. Я правильно внедряю код или в библиотеке есть ошибка?