Должен ли я открывать / закрывать файл повторно или держать его открытым в течение длительного периода времени (~ 1 неделя)?

Я реализую сбор данных для программы инверсии цепи Маркова Монте-Карло. Однако на выполнение MCMC может уйти неделя или больше! Не лучше ли открыть файл в начале прогона:

with h5py.File('my_data.hdf5', 'r+', libver='latest') as fp:
    fp.swmr_mode = True
    mcmc_run(fp)

Или каждый раз, когда я хочу добавить набор данных (внутри mcmc_run())

with h5py.File('my_data.hdf5', 'r+', libver='latest') as fp:
    fp.swmr_mode = True
    fp['dataset'] = new_data

Мне нужно сэкономить около 7 МБ на 9 наборах данных для каждого приема (всего 500 за неделю вычислений, ~ 5000 итераций). К сожалению, данные поступают от нескольких разных объектов внутри итерации, поэтому я не могу сгруппировать их и открыть файл один раз за принятие.


person Georgia S    schedule 13.05.2016    source источник
comment
Я не знаю h5py, но данные обычно сбрасываются (как фиксация) при закрытии, поэтому было бы безопаснее закрыть. Однако у вас может быть доступна flush операция, так что это будет иметь тот же эффект. Проблема с закрытием заключается в том, что вы теряете положение файла, но вы должны быть готовы к перезапускам, вызванным отключением электроэнергии и т. Д.   -  person cdarke    schedule 13.05.2016
comment
@cdarke Хорошая особенность hdf5 в том, что нет проблем с потерей позиции файла. Доступ к наборам данных можно сравнить с массивом numpy в словаре. Есть операция смыва. В настоящее время я сбрасываю данные после каждого изменения набора данных.   -  person Georgia S    schedule 13.05.2016
comment
Для пробежек, которые занимают так много времени, вы можете подумать, что произойдет, если у вас отключится электричество (как ветеран MC, это мой самый большой страх). Кажется, что закрытие и повторное открытие файла, вероятно, безопаснее и с меньшей вероятностью оставит файл уязвимым для повреждения во время отключения электроэнергии, сбоя компьютера и т. Д.   -  person gariepy    schedule 13.05.2016
comment
@gariepy Это хороший аргумент. Я сделаю все возможное и открою / закрою файл.   -  person Georgia S    schedule 14.05.2016


Ответы (1)


[Размещение комментария в качестве ответа]

Для пробежек, которые занимают так много времени, вы можете подумать, что произойдет, если у вас отключится электричество (как ветеран MC, это мой самый большой страх). Я рекомендую закрыть и снова открыть файл, потому что это, вероятно, более безопасно и с меньшей вероятностью сделает файл уязвимым для повреждения во время отключения электроэнергии, сбоя компьютера и т. Д. При работе в течение многих дней.

person gariepy    schedule 16.05.2016