Могу ли я обслуживать несколько клиентов, используя только приложение 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 и флягу.