Python Glossary English

все Python 3ioпонятие

Буферизация

буферизация

Буферизованный ввод-вывод накапливает данные в памяти перед записью. flush() принудительно сбрасывает буфер.

Синтаксис

open(file, buffering=-1)  # -1 авто, 0 без буфера (только binary), 1 строчный
stream.flush()

buffering=0 допустим только в бинарном режиме — в текстовом open() бросит ValueError; строчная буферизация (buffering=1) наоборот имеет смысл лишь для текстовой записи. Буфер живёт в памяти процесса, поэтому аварийное завершение или os._exit() теряют несброшенное, а сам flush() лишь передаёт данные операционной системе — довести их до диска может только os.fsync(). Для вывода в консоль тот же эффект даёт print(..., flush=True).

Примеры

import io
buf = io.StringIO()
buf.write('text')
buf.getvalue() # → 'text'  StringIO не нуждается в flush
f = open('test_io.txt', 'w', buffering=1)
f.write('line\n')
f.flush()  # строки сразу сбрасываются
f.close()
open('test_io.txt').read() # → 'line\n'

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности