2016-03-07 5 views
11

Ich habe Web-Anwendung in Flask geschrieben. Wie von allen vorgeschlagen, kann ich Flask nicht in der Produktion verwenden. Also dachte ich an Gunicorn mit Flask.So führen Sie Flask mit Gunicorn im Multithread-Modus

In Flask-Anwendung lade ich einige Machine Learning-Modelle. Diese haben zusammen eine Größe von 8 GB. Die Parallelität meiner Webanwendung kann bis zu 1000 Anfragen gehen. Und der RAM der Maschine ist 15GB.
Also, was ist der beste Weg, um diese Anwendung zu starten?

Antwort

20

Sie können Ihre App mit mehreren Arbeitern oder asynchronen Arbeitern mit Gunicorn starten.

Flask server.py

from flask import Flask 
app = Flask(__name__) 

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

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

Gunicorn mit GEVENT async Arbeiter

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

Gunicorn 1 Arbeiter 12 Fäden:

gunicorn server:app -w 1 --threads 12 

Gunicorn mit 4 Arbeiter (Multiprozessing):

gunicorn server:app -w 4 

Weitere Informationen über Kolben Nebenläufigkeit in diesem Beitrag: How many concurrent requests does a single Flask process receive?.

+1

Bei mehreren Arbeitern gibt es keine Speicherausnahme, da die Größe der Modelle groß ist. Ich denke, mit jedem Arbeiter wird es alle Modelle in verschiedenen Speicherbereich laden – neel

+0

Sie müssen Async-Worker wie gevent verwenden, um die Parallelität mit einem Arbeiter zu ermöglichen: 'gunicorn -k gevent --worker-connections 1000'. – molivier

+0

Sie können auch 'threads 'hinzufügen, um jeden Worker mit der angegebenen Anzahl von Threads auszuführen. Siehe Bearbeiten. – molivier