2017-08-22 2 views
0

Ich benutze eine Flasche App hinter Gunicorn Server. Ich möchte, dass meine App eine gleichzeitige Anfrage erfüllt. Um diesen Zweck zu testen, habe ich einen kleinen Test geschrieben:Dienen gleichzeitige Benutzer mit Flask und Gunicorn

@app.route('/test', methods=['GET']) 
def get_tasks_test(): 
    time.sleep(10) 
    return jsonify({'test is working'}) 

Ich beginne gunicorn mit:

gunicorn app: app localhost: 8000 --reload --worker-Verbindungen 100 - Arbeiter-Klasse GEVENT

jetzt sende ich einige gleichzeitigen Anforderungen gleichzeitig, und erwartet, dass der Server für alle in ca. 10 Sekunden reagieren (wegen des Schlafes i festgelegt habe) der Server jedoch scheint zu warten 10 Sekunden s zwischen jeder Anfrage, die die Nebenläufigkeit meiner Meinung nach widerlegt. Bin ich richtig? Was sollte ich tun, damit mein Server die Nebenläufigkeit behandelt?

Antwort

3

Ich glaube nicht, --worker-connections ist, was Sie wollen. Es verwendet Gevent, das von Ihrem time.sleep(10) blockiert wird.

Was Sie stattdessen wollen, ist --workers 4, die 4 Worker-Prozesse öffnen wird. Damit können Sie 4 gleichzeitige Anfragen bearbeiten. Ich würde das nicht auf 100 setzen, wie Sie es für Arbeiterverbindungen haben, stattdessen lautet die allgemeine Faustregel: 2-4x the number of processor cores. Wenn Sie also einen Quad-Core-Computer mit aktiviertem Hyper-Threading haben, können Sie 32 Worker ausführen.

Schließlich können Sie --threads 4 übergeben, damit jeder dieser Prozesse 4 Threads öffnet, um Anforderungen zu bearbeiten. Achten Sie darauf, nicht zu viele Prozesse mit vielen Threads zu erstellen. Dies ist keine unbegrenzte Ressource.

Referenzen

http://docs.gunicorn.org/en/latest/settings.html?highlight=--worker-connections#workers

http://docs.gunicorn.org/en/stable/design.html#choosing-a-worker-type

Verwandte Themen