что именно делает файл python file.flush ()?

Я нашел это в документации на Python для файловых объектов :

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

Поэтому мой вопрос: что именно делает flush Python? Я думал, что он заставляет записывать данные на диск, но теперь я вижу, что это не так. Зачем?

    3 Solutions collect form web for “что именно делает файл python file.flush ()?”

    Обычно используются два уровня буферизации:

    1. Внутренние буферы
    2. Буферы операционной системы

    Внутренние буферы – это буферы, созданные исполняемой средой / библиотекой / языком, с которыми вы программируете, и предназначены для ускорения работы, избегая системных вызовов для каждой записи. Вместо этого, когда вы пишете файл-объект, вы записываете его в свой буфер, и всякий раз, когда буфер заполняется, данные записываются в фактический файл с помощью системных вызовов.

    Однако из-за буферов операционной системы это может не означать, что данные записываются на диск . Это может означать, что данные копируются из буферов, поддерживаемых вашей средой выполнения, в буферы, поддерживаемые операционной системой.

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

    Таким образом, чтобы помочь с этим, у вас есть методы flush и fsync , на их соответствующих объектах.

    Первый, flush , просто выпишет любые данные, которые задерживаются в программном буфере для фактического файла. Обычно это означает, что данные будут скопированы из буфера программы в буфер операционной системы.

    В частности, это означает, что если другой процесс имеет тот же файл, открытый для чтения, он сможет получить доступ к данным, которые вы только что сбросили в файл. Однако это не обязательно означает, что он «постоянно» хранится на диске.

    Для этого вам нужно вызвать метод os.fsync который обеспечивает синхронизацию всех буферов операционной системы с устройствами хранения, к которым они предназначены, другими словами, этот метод будет копировать данные из буферов операционной системы на диск.

    Как правило, вам не нужно беспокоиться ни с одним из методов, но если вы находитесь в сценарии, где паранойя о том, что на самом деле заканчивается на диске, это хорошо, вы должны сделать оба вызова в соответствии с инструкциями.

    Потому что операционная система может этого не делать. Операция flush заставляет данные файла в кеш файла в ОЗУ, и оттуда это задача ОС, чтобы фактически отправить ее на диск.

    Он очищает внутренний буфер, который должен заставить ОС записывать буфер в файл. [1] Python использует буферизацию по умолчанию ОС, если вы не настроили ее иначе.

    Но иногда ОС по-прежнему предпочитает не сотрудничать. Особенно с замечательными вещами, такими как задержки записи в Windows / NTFS. В основном внутренний буфер сбрасывается, но буфер ОС по-прежнему держится за него. Поэтому вы должны сообщить ОС, чтобы записать его на диск с помощью os.fsync() в этих случаях.

    [1] http://docs.python.org/library/stdtypes.html

      Python - лучший язык программирования в мире.