webentwicklung-frage-antwort-db.com.de

Behandle Flask Anforderungen gleichzeitig mit threaded = True

Was genau macht die Übergabe von threaded = True An app.run()?

Meine Anwendung verarbeitet Eingaben des Benutzers und benötigt dafür einige Zeit. Während dieser Zeit kann die Anwendung andere Anforderungen nicht verarbeiten. Ich habe meine Anwendung mit threaded=True Getestet und kann mehrere Anfragen gleichzeitig bearbeiten.

47
Harrison

Ab Flask 1.0 wird der in Flask= enthaltene WSGI-Server standardmäßig im Thread-Modus ausgeführt.

Vor 1.0 oder wenn Sie das Threading deaktivieren, wird der Server im Singlethread-Modus ausgeführt und kann jeweils nur eine Anforderung verarbeiten. Alle parallelen Anfragen müssen warten, bis sie bearbeitet werden können. Dies kann zu Problemen führen, wenn Sie versucht haben, Ihren eigenen Server über eine Anfrage zu kontaktieren .

Mit threaded=True Anfragen werden jeweils in einem neuen Thread behandelt. Wie viele Threads Ihr Server gleichzeitig verarbeiten kann, hängt ganz von Ihrem Betriebssystem ab und wie viele Threads pro Prozess festgelegt werden. Die Implementierung verwendet das SocketServer.ThreadingMixIn class , wodurch die Anzahl der Threads, die durchlaufen werden können, nicht begrenzt wird.

Beachten Sie, dass der Flask Server nur für Entwicklung vorgesehen ist. Es ist kein produktionsbereiter Server. Verlassen Sie sich nicht darauf, um Ihre Website im weiteren Web zu betreiben. Verwenden Sie stattdessen einen geeigneten WSGI-Server (wie gunicorn oder WSGI ).

64
Martijn Pieters

Wie viele Anfragen kann meine Anwendung gleichzeitig mit dieser Anweisung bearbeiten?

Dies hängt stark von Ihrer Anwendung ab. Für jede neue Anforderung wird ein Thread gestartet. Dies hängt davon ab, wie viele Threads Ihre Maschine verarbeiten kann. Ich sehe keine Möglichkeit, die Anzahl der Threads zu begrenzen (wie es uwsgi in einer Produktionsbereitstellung bietet).

Was sind die Nachteile dieser Verwendung? Wenn ich nicht mehr als ein paar Anfragen gleichzeitig erwarte, kann ich das einfach weiter verwenden?

Das Wechseln von einem einzelnen Thread zu einem Multithreading kann zu Fehlern führen. Wenn Sie dies verwenden, achten Sie darauf, wie Sie mit globalen Objekten umgehen (siehe g-Objekt in der Dokumentation!) Und geben Sie an.

5
Paul Becotte