Выбор ответа Junior Деплой и эксплуатация обновлено

PYTHONUNBUFFERED в контейнере

Вопрос

Зачем в Docker-образе Python-сервиса ставят PYTHONUNBUFFERED=1?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Чтобы stdout и stderr не буферизовались и логи сразу шли в docker logs. Когда stdout не терминал, Python буферизует вывод, и логи приходят пачками с задержкой, а при падении процесса последние строки теряются.

Варианты ответа

  1. Чтобы ускорить выполнение кода за счёт отказа от буфера ввода-вывода
  2. Чтобы stdout и stderr не буферизовались и логи сразу шли в docker logsправильный ответ
  3. Чтобы отключить сборщик мусора и уменьшить паузы при обработке каждого запроса
  4. Чтобы запретить запись .pyc-файлов в слой образа с исходным кодом

Разбор

Когда stdout не терминал, Python буферизует вывод, и логи приходят пачками с задержкой, а при падении процесса последние строки теряются. Переменная отключает буферизацию. Запись .pyc отключает другая переменная, PYTHONDONTWRITEBYTECODE, а на скорость кода и GC эти настройки не влияют.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.