2016-03-07 13 views
11

Ho un'applicazione web scritta in Flask. Come suggerito da tutti, non posso usare Flask in produzione. Così ho pensato a Gunicorn con Flask.Come eseguire Flask con Gunicorn in modalità multithreading

Nell'applicazione Flask sto caricando alcuni modelli di Machine Learning. Questi sono di dimensioni 8 GB collettivamente. La concorrenza della mia applicazione Web può andare fino a 1000 richieste. E la RAM della macchina è 15GB.
Quindi qual è il modo migliore per eseguire questa applicazione?

risposta

20

È possibile avviare l'app con più lavoratori o lavoratori asincroni con Gunicorn.

Flask server.py

from flask import Flask 
app = Flask(__name__) 

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

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

Gunicorn con l'operaio gevent asincrono

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

Gunicorn 1 operaio 12 fili:

gunicorn server:app -w 1 --threads 12 

Gunicorn con 4 addetti (multiprocessing):

gunicorn server:app -w 4 

Ulteriori informazioni sulla concorrenza di Flask in questo post: How many concurrent requests does a single Flask process receive?.

+1

Con più worker si sta verificando un'eccezione di memoria in quanto le dimensioni dei modelli sono grandi. Penso che con ogni lavoratore caricherà tutti i modelli in uno spazio di memoria diverso. – neel

+0

È necessario utilizzare async worker come gevent per consentire la concorrenza con un worker: 'gunicorn -k gevent --worker-connections 1000'. – molivier

+0

È anche possibile aggiungere '--threads' per eseguire ogni worker con il numero di thread specificato. Vedi Modifica. L'opzione – molivier

Problemi correlati