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