подразумевает ли close() флеш() в Python?
-
20-09-2019 - |
Вопрос
В Python и вообще - делает close()
операция над файловым объектом подразумевает flush()
операция?
Решение
Да.Он использует базовый close()
функция, которая делает это за вас (источник).
Другие советы
Примечание: close()
и flush()
не гарантирует, что данные на диске действительно безопасны.Это просто гарантирует, что в ОС есть данные ==, что они не буферизуются внутри процесса.
Вы можете попробовать синхронизировать или fsync, чтобы записать данные на диск.
Да, в Python 3 это наконец-то в официальной документации, но это уже имело место в Python 2 (см. Ответ Мартина).
filehandle.close не обязательно сбрасывается.Удивительно, но filehandle.flush тоже не помогает — он все равно может застревать в буферах ОС во время работы Python.Посмотрите на этот сеанс, где я написал в файл, закрыл его и Ctrl-Z открыл командную строку оболочки и проверил файл:
$ cat xyz
ghi
$ fg
python
>>> x=open("xyz","a")
>>> x.write("morestuff\n")
>>> x.write("morestuff\n")
>>> x.write("morestuff\n")
>>> x.flush
<built-in method flush of file object at 0x7f58e0044660>
>>> x.close
<built-in method close of file object at 0x7f58e0044660>
>>>
[1]+ Stopped python
$ cat xyz
ghi
Впоследствии я могу снова открыть файл, и это обязательно синхронизирует файл (потому что в этом случае я открываю его в режиме добавления).Как говорили другие, системный вызов синхронизации (доступный из пакета os) должен сбрасывать все буферы на диск, но это может иметь последствия для общесистемной производительности (он синхронизирует все файлы в системе).