Короткий ответ - использовать uWSGI
или gunicorn
.
Более длинный ответ: ваша интуиция верна - вас беспокоит «параллелизм» или количество одновременных запросов, которые может обработать ваше приложение. И да, одно приложение Flask без какого-либо сервера приложений может обрабатывать один запрос за раз. Как вы это измените? Для большинства приложений Python единица параллелизма - это процесс (существуют платформы, которые меняют это, но большинство развертываний приложений, вероятно, основаны на процессах). То есть вы запускаете процесс для каждого параллельного запроса, который, по вашему мнению, вам понадобится. Серверы приложений, такие как uWSGI
, прослушивают ваше приложение, а затем отправляют запрос процессу из пула. Итак, сколько процессов вам нужно?
Вторая концепция, которая вам нужна, - это «пропускная способность» - сколько запросов может быть обслужено за определенное время, которое зависит от «параллелизма» и отличается от него, когда ваша интуиция может ввести вас в заблуждение. Допустим, у вас есть 8 процессов. Вы можете подумать, «но у меня будет 100 пользователей, 8 явно недостаточно». Предположим, вы знаете, что каждый запрос выполняется за 1/8 (.125) секунд. Это означает, что каждый процесс может обслуживать 8 запросов в секунду. Раз 8 процессов; Ваша пропускная способность будет (примерно) 64 запросов в секунду. Процесс 8 делает вас намного ближе к вашим 100 пользователям, чем вы могли ожидать в противном случае. Ваши 100 пользователей, вероятно, фактически не будут выдавать запросы в этом 1-секундном окне. Возможно, но вряд ли. Проблема не в параллелизме, а в том, получит ли пользователь ответ в разумные сроки.
Надеюсь, это поможет. Масштабирование - замечательная тема - и прямая, и одновременно неприятная. По мере увеличения вашего трафика приведенные выше рекомендации будут смещаться, и вам понадобятся все более и более продвинутые методы. Но для начала - будьте проще и сосредоточьтесь на основах.
См. Сколько одновременных запросов получает один процесс Flask?