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

gunicorn --preload

Вопрос

Что даёт флаг --preload у gunicorn и в чём подвох?

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

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

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

Коротко

Правильный ответ: Приложение грузится в мастере до форка, но соединения при импорте станут общими. С --preload импорт приложения и его тяжёлых зависимостей происходит один раз, а воркеры получают копию памяти через fork с copy-on-write.

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

  1. Воркеры запускаются заранее на соседних серверах и ждут трафика
  2. Включает кеширование ответов в мастер-процессе для повторных запросов
  3. Приложение грузится в мастере до форка, но соединения при импорте станут общимиправильный ответ
  4. Отключает перезапуск воркеров, поэтому утечки памяти накапливаются

Разбор

С --preload импорт приложения и его тяжёлых зависимостей происходит один раз, а воркеры получают копию памяти через fork с copy-on-write. Подвох: всё, что создано при импорте, например соединение с БД, Redis или пул потоков, будет унаследовано всеми воркерами, и они начнут делить один сокет. Такие ресурсы создают после форка (хук post_fork или лениво). Кеширования ответов и запрета перезапуска флаг не даёт.

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

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