Из-за https://bugs.python.org/issue36054 рекомендации в этих документах опасны при работе внутри контейнера. Если вашему контейнеру было выделено (скажем) одно ядро и 512 МБ ОЗУ на машине с 64 ядрами, multiprocessing.cpu_count()
считает, что у него 64 ядра вместо 1, и в итоге вы порождаете 129 рабочих процессов. Это намного больше, чем у контейнера есть ресурсы, и в конечном итоге вызывает сбои из-за нехватки памяти.
Привет 😄! Спасибо за уведомление.
По умолчанию в Gunicorn используется один воркер, даже если в документации есть пример определения числа. Учитывая, что в конечном итоге это, вероятно, будет исправлением ошибки Python, я не уверен, что нам следует что-то делать здесь конкретно. Тем не менее, размещение его ниже по течению в flask-gunicorn имеет большой смысл.
это скорее то, что должно быть исправлено в python, на самом деле это не проблема. Документация была сделана в то время, когда докера еще не существовало, но я думаю, что она все еще полезна для примера, поскольку она очень явная. Тогда закрывайте тему.
Добавление в документацию одной крошечной строчки («но остерегайтесь BPO-36054 при использовании контейнеров!») может избавить многих пользователей от головной боли на ~ лет, пока они будут использовать версии Python, в которых это не исправлено. Если вы не возражаете против слияния, я отправлю PR, если меня никто не опередит.
@twosigmajab хорошая идея! пожалуйста продолжай :)
Самый полезный комментарий
@twosigmajab хорошая идея! пожалуйста продолжай :)