Выбор ответа Junior Деплой и эксплуатация обновлено
PYTHONUNBUFFERED в контейнере
Вопрос
Зачем в Docker-образе Python-сервиса ставят PYTHONUNBUFFERED=1?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Чтобы stdout и stderr не буферизовались и логи сразу шли в docker logs. Когда stdout не терминал, Python буферизует вывод, и логи приходят пачками с задержкой, а при падении процесса последние строки теряются.
Варианты ответа
- Чтобы ускорить выполнение кода за счёт отказа от буфера ввода-вывода
- Чтобы stdout и stderr не буферизовались и логи сразу шли в
docker logsправильный ответ - Чтобы отключить сборщик мусора и уменьшить паузы при обработке каждого запроса
- Чтобы запретить запись
.pyc-файлов в слой образа с исходным кодом
Разбор
Когда stdout не терминал, Python буферизует вывод, и логи приходят пачками с задержкой, а при падении процесса последние строки теряются. Переменная отключает буферизацию. Запись .pyc отключает другая переменная, PYTHONDONTWRITEBYTECODE, а на скорость кода и GC эти настройки не влияют.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.