Могу ли я обслуживать несколько клиентов, используя только приложение Flask.запустить () как автономный?
Я знаю, что могу связать Flask с Apache или другими веб-серверами. Но я думал о запуске Flask как автономного сервера, обслуживающего несколько клиентов одновременно.
это возможно? Должен ли я обрабатывать нерест нескольких потоков и управлять ими?
2 ответов
flask.Flask.run
принимает дополнительные аргументы ключевого слова (**options
), которые он направляет на werkzeug.serving.run_simple
- два из этих аргументов threaded
(который вы можете установить к True
для включения резьбы) и processes
(который вы можете установить на число больше одного, чтобы Werkzeug порождал более одного процесса для обработки запросов). Так что если вы:
if __name__ == '__main__':
app.run(threaded=True)
# Alternately
# app.run(processes=3)
колба скажет Werkzeug использовать резьбу и породить три процесса для обработки входящих запросы.
это, как говорится, сверла по serving.run_simple
обертывает стандартную библиотеку wsgiref
package - и этот пакет содержит ссылочную реализацию WSGI, а не готовый к производству веб-сервер. Если вы собираетесь использовать Flask в производстве (предполагая, что "производство" не является внутренним приложением с низким трафиком с не более чем 10 одновременными пользователями), убедитесь, что он стоит за реальным веб-сервером (см. раздел документов Flask под названием развертывание Опции для некоторых предложенных методов).
использовать простой app.run()
изнутри Flask создает один синхронный сервер в одном потоке, способный обслуживать только одного клиента за раз. Именно по этой причине он предназначен для использования в контролируемых средах с низким спросом (т. е. разработка, отладка).
нерест потоков и управление ими самостоятельно, вероятно, не приведет вас очень далеко, из-за питон Гил.
тем не менее, у вас все еще есть хорошие варианты. Gunicorn является твердым, простым в использовании сервером WSGI, который позволит вам порождать несколько рабочих (отдельные процессы, поэтому не волнуется GIL), и даже поставляется с асинхронный работников это ускорит ваше приложение (и сделает его более безопасным) с небольшим количеством работы с вашей стороны (особенно с колбой).
тем не менее, даже Gunicorn, вероятно, не должен быть непосредственно публично разоблачен. В производстве он должен использоваться за более надежным HTTP-сервером;nginx и как правило, сочетается с Gunicorn и флягу.