В процессе работы с Python нередко возникает ситуация, когда необходимо управлять процессом буферизации вывода. К примеру, при написании кода, который выдает данные в реальном времени, буферизация вывода может создать нежелательную задержку.
Буферизация вывода включена по умолчанию в интерпретаторе Python для sys.stdout. Однако существуют способы ее отключить. Далее будут рассмотрены некоторые из них.
Использование параметра -u
Один из способов отключить буферизацию вывода — использовать параметр -u в командной строке при запуске программы. К примеру, если у вас есть скрипт с именем script.py, вы можете запустить его с отключенной буферизацией следующим образом:
python -u script.py
Обертка sys.stdout в объект, который сбрасывает буфер после каждой записи
Это еще один способ отключить буферизацию вывода. В этом случае sys.stdout оборачивается в объект, который сбрасывает буфер после каждой записи.
class Unbuffered(object):
   def __init__(self, stream):
       self.stream = stream
   def write(self, data):
       self.stream.write(data)
       self.stream.flush()
   def writelines(self, datas):
       self.stream.writelines(datas)
       self.stream.flush()
   def __getattr__(self, attr):
       return getattr(self.stream, attr)
import sys
sys.stdout = Unbuffered(sys.stdout)
Установка переменной окружения PYTHONUNBUFFERED
Переменная окружения PYTHONUNBUFFERED может быть установлена для отключения буферизации вывода. Это можно сделать следующим образом:
export PYTHONUNBUFFERED=TRUE
Использование функции os.fdopen()
Функция os.fdopen() может быть использована для открытия файла дескриптора и его последующей ассоциации с новым файловым объектом без буферизации.
import os import sys sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
В приведенных выше способах отключение буферизации вывода происходит глобально и влияет на все операции вывода. Тем не менее, в некоторых случаях может быть нужно сбросить буфер после конкретной операции вывода. В этом случае можно использовать функцию flush():
print('Hello, World!', flush=True)
В этом случае буфер сбрасывается сразу после операции print(), обеспечивая немедленный вывод.
 
                     
                                     
                                     Перейти в телеграм, чтобы получить результаты теста
                                            Перейти в телеграм, чтобы получить результаты теста
                                         
                             





 
             
            
         Забрать
                    Забрать
Добавить комментарий