Вопрос

У меня есть файл, открытый для записи, и процесс, выполняющийся в течение нескольких дней - что-то записывается в файл в относительно случайные моменты.Насколько я понимаю, пока я не выполню file.close(), есть вероятность, что на самом деле ничего не сохранено на диск.Это правда?

Что делать, если система выйдет из строя, когда основной процесс еще не завершен?Есть ли способ выполнять своего рода фиксацию один раз в день?..скажем, 10 минут (и я сам называю это фиксацией - не нужно запускать таймер)?Является ли file.close() и open(file, 'a') единственным способом, или есть лучшие альтернативы?

Это было полезно?

Решение

Вы должны уметь использовать file.flush() чтобы сделать это.

Другие советы

Если вы не хотите завершать текущий процесс, чтобы добавить f.flush() (звучит так, будто он работает уже несколько дней?), с вами все должно быть в порядке.Если вы увидите, что файл, в который вы записываете, становится больше, вы не потеряете эти данные...

Из документов Python:

написать(str) Запишите строку в файл.Возвращаемого значения нет.Из-за буферизации строка может фактически не отображаться в файле до тех пор, пока не будет вызван метод flush() или close() .

Похоже, что система буферизации Python автоматически удалит файловые объекты, но это не гарантировано, когда это произойдет.

Чтобы убедиться, что ваши данные записаны на диск, используйте file.flush() за которым следует os.fsync(file.fileno()).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top