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