Позвольте мне устранить путаницу для вас.
Когда вы используете Flask при локальной разработке, вы используете встроенный однопоточный сервер. это означает, что он будет обрабатывать только один запрос за раз. Это одна из причин, почему вы не должны просто иметь FLASK_ENV=production
и работать в производственной среде. Встроенный сервер не способен работать в таких средах. После того, как вы измените FLASK_ENV
на рабочий и запустите, вы увидите предупреждение в терминале.
Теперь перейдем к тому, как запустить Flask в производственной среде, процессорах, ядрах, потоках и других. stuff
Чтобы запустить Flask в производственной среде, вам необходим соответствующий сервер приложений, который может запускать ваше приложение Flask. Здесь используется Gunicorn , который совместим с Flask и одним из самых востребованных способов бега Flask.
В Gunicorn у вас есть разные способы настроить оптимальный способ его запуска на основе спецификаций ваших серверов. Вы можете достичь этого следующими способами:
- Рабочий класс - Тип используемого рабочего
- Количество рабочих
- Количество потоков
Способ расчета максимального количества одновременных запросов выглядит следующим образом: Принимая 4-ядерный сервер за
Согласно документации gunicorn , предлагается оптимальный number of workers
как (2 * num_of_cores) + 1
, который в этом случае становится (2 * 4) +1 = 9
Теперь оптимальная конфигурация для числа потоков s равна 2 to 4 x $(num_of_cores)
, что в данном случае 4 * 9 = 36
Итак, теперь у вас есть 9 рабочих с 36 потоками каждый. Каждый поток может обрабатывать один запрос за раз, так что вы можете иметь 9 * 36 = 324 одновременных подключений
Аналогично, вы можете иметь расчет для Waitress. Я предпочитаю использовать Gunicorn, поэтому вам нужно проверить документы официантка для конфигурации.
Теперь перейдем к веб-серверам
До сих пор вы настраивали сервер приложений для запуска Flask. Это работает, но вы не должны напрямую выставлять сервер приложений на inte rnet. Вместо этого всегда предлагается развернуть Flask за обратным прокси-сервером, например Nginx. Nginx действует как полноценный веб-сервер, способный обрабатывать реальные рабочие нагрузки.
Таким образом, вы можете использовать комбинацию из списка ниже в соответствии с вашими требованиями,
Flask + Сервер приложений + веб-сервер , где Сервер приложений - это один из Gunicorn, uWSGI, Gevent, Twisted Web, Waitress, et c и веб-сервер из одного из Nginx, Apache, Traefik, Caddy, et c