означает, что close () подразумевает flush () в Python? - PullRequest
32 голосов
/ 15 марта 2010

В Python и вообще - означает ли операция close() над файловым объектом операцию flush()?

Ответы [ 4 ]

30 голосов
/ 15 марта 2010

Да. Он использует базовую функцию close(), которая делает это за вас ( источник ).

16 голосов
/ 15 марта 2010

NB: close() и flush() не гарантируют, что данные действительно защищены на диске. Это просто гарантирует, что ОС имеет данные ==, что они не буферизируются внутри процесса.

Вы можете попробовать синхронизировать или fsync, чтобы получить данные, записанные на диск.

0 голосов
/ 03 июля 2018

Да, в Python 3 это, наконец, в официальной документации , но уже было в Python 2 (см. Ответ Мартина ).

0 голосов
/ 14 сентября 2012

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

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

...