Подтвердить что ты не робот

Что такое использование буферизации в встроенной функции open() python?

Документация по Python: https://docs.python.org/2/library/functions.html#open

open(name[, mode[, buffering]])  

В приведенной выше документации говорится: "Необязательный аргумент буферизации указывает размер файла, требуемый буфером: 0 означает небуферизованный, 1 означает буферизацию по строке, любое другое положительное значение означает использование буфера (приблизительно) этого размера (в байтах). Отрицательная буферизация означает использование системы по умолчанию. Если не указано, используется системная настройка по умолчанию".
Когда я использую

filedata = open(file.txt,"r",0)  

или

filedata = open(file.txt,"r",1)  

или

filedata = open(file.txt,"r",2)

или

filedata = open(file.txt,"r",-1) 

или

filedata = open(file.txt,"r")

Выход не изменяется. Каждая строка, показанная выше, печатает с такой же скоростью.
Выход:

г. Bean - британская телевизионная программа, серия из пятнадцати 25 -

минутные эпизоды, написанные Робин Дрисколл и в ролях: Роуэн Аткинсон как

символ заголовка. Различные эпизоды были также написаны Робин

Дрисколл и Ричард Кертис, а другой - Бен Элтон. Тринадцать из

эпизоды транслировались на ITV, начиная с пилота 1 января 1990 года, пока

"Спокойной ночи г-н Bean" 31 октября 1995 года. Клип-шоу "Лучшие биты of

г. Bean", был транслирован 15 декабря 1995 года, и один эпизод: "Волосы на

г. Bean Лондона", не транслировался до 2006 года Nickelodeon.

Тогда как полезен параметр буферизации в функции open()? Какие  значение

этого параметра буферизации лучше всего использовать?

4b9b3361

Ответ 1

Включение буферизации означает, что вы напрямую не взаимодействуете с представлением файла ОС или его API файловой системы. Вместо этого порция данных считывается из потока файлов необработанной ОС в буфер до тех пор, пока он не будет использован, после чего в буфер будет загружено больше данных. С точки зрения объектов, которые вы получаете, вы получите объект BufferedIOBase, оборачивающий базовый RawIOBase (который представляет поток необработанных файлов).

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

Какой размер буфера вы выберете, будет зависеть от того, как вы потребляете данные. Для приведенного выше примера размер буфера в 1 символ был бы ужасным, 3 символа - нормальным, и любой большой кратный из 3 символов, который не вызывает заметной задержки для ваших пользователей, был бы идеальным.

Ответ 2

Вы также можете проверить размер буфера по умолчанию, вызвав только атрибут DEFAULT_BUFFER_SIZE только для чтения из модуля io.

import io
print (io.DEFAULT_BUFFER_SIZE)

Ответ 3

При настройке буфера на 1 будет отображаться только одна строка буферизованных данных, а в случае отрицательного значения размер буфера будет системным. ~ Это ключ