2016-03-07 2 views
11

У меня есть веб-приложение, написанное в Flask. Как было предложено всеми, я не могу использовать Flask в производстве. Так что я подумал о Gunicorn с флягой.Как запустить Flask с Gunicorn в многопоточном режиме

В приложении Flask Я загружаю некоторые модели машинного обучения. Они имеют размер 8 ГБ в совокупности. Параллельность моего веб-приложения может идти до 1000 запросов. И ОЗУ машины составляет 15 ГБ.
Итак, что является лучшим способом запуска этого приложения?

ответ

20

Вы можете запустить свое приложение с несколькими работниками или асинхронными рабочими с помощью Gunicorn.

Колба server.py

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

if __name__ == "__main__": 
    app.run() 

Gunicorn с GEvent асинхронном работника

gunicorn server:app -k gevent --worker-connections 1000 

Gunicorn 1 работника 12 потоков:

gunicorn server:app -w 1 --threads 12 

Gunicorn с 4 рабочими (многопроцессорных):

gunicorn server:app -w 4 

Дополнительная информация о Flask concurrency в этом сообщении: How many concurrent requests does a single Flask process receive?.

+1

С несколькими рабочими оно выбрасывает из памяти исключение, так как размер моделей большой. Я думаю, что с каждым рабочим он будет загружать все модели в различное пространство памяти. – neel

+0

Вам нужно использовать async worker, как gevent, чтобы разрешить параллелизм с одним рабочим: 'gunicorn -k gevent -worker-connections 1000'. – molivier

+0

Вы также можете добавить '--threads' для запуска каждого рабочего с указанным количеством потоков. Подробнее см. – molivier

Смежные вопросы