Die Hauptforschung in diesem Artikel besteht darin, dass Flask eine asynchrone nicht blockierende Anforderungsfunktion implementiert und die spezifische Implementierung wie folgt ist.
Kürzlich, als ich an einem IoT-Projekt arbeitete, musste ich einen asynchronen, nicht blockierenden HTTP-Server erstellen. Nachdem ich nach Informationen gesucht hatte, stellte ich fest, dass ich das GeVent -Paket verwenden konnte.
Gevent ist eine Python -gleichzeitige Netzwerkbibliothek, die Greenets auf der Grundlage von Ereignisschleifen von Libevent verwendet, um eine erweiterte Synchronisations -API bereitzustellen. Hier ist ein Codebeispiel:
von Gevent.wsgi import Wsgiserverfrom Your Application Import AppHttp_Server = Wsgiserver (('', 5000), App) http_server.serve_forever ()Unten finden Sie eine Liste der asynchronen nicht blockierenden Codes von Flask und portieren Sie sie bei Bedarf direkt.
# coding = utf-8# Python Version: 3.5.1# Flaskfrom Flask Import-Flask, Anfrage, G# Geventfrom Gevent importieren Monkeyfrom Gevent.pywsgi import WSGiservermonkey.patch_all ()# Gevent Endimport TimeApp = Flask (__ Name __) app.config.update(debug=true)@app.route ('/asyn/', Methods = ['get']) def test_asyn_one (): print ("asyn hat eine Anfrage!") Zeit.sleep (10) return __name__ == "__main__": # app.run () http_server = wsgiserver (('', 5000), App) http_server.serve_forver ()Warum add Monkey.patch_all () Anweisung? Auf der offiziellen Website von Gevnet gibt es eine ausführliche Erklärung. Hier finden Sie eine kurze Erklärung:
Affen ersetzen Sie Funktionen und Klassen im Standard -Socket -Modul sorgfältig durch ihre kooperativen Gegenstücke. Auf diese Weise können selbst die Module, die GEVENT nicht bewusst sind, von der Ausführung in einer Multi-Greenlet-Umgebung profitieren.
Übersetzung: Monkey Patch ersetzt sorgfältig die Funktionen und Klassen von Standard -Socket -Modulen durch Parallelcode -Kopien. Auf diese Weise kann das Modul es der Gevent ermöglichen, in der Umgebung mit Multi-Green-Umgebung besser zu laufen, ohne es zu wissen.
Öffnen Sie den Browser, fordern Sie zunächst http://127.0.0.1:5000/asyn/ an und fordern Sie dann zehnmal http://127.0.0.1:5000/test/ diese Schnittstelle an. Wenn es sich um ein allgemeines Flask -Framework handelt, reagiert die nachfolgende Schnittstelle nicht.
Der Druckinhalt ist wie folgt:
Asyn hat eine Anfrage!
127.0.0.1 - - [2016-10-24 20:45:10] "Get/test/http/1.1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:11] "Get/test/http/1.1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:11] "Get/test/http/1.1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:12] "Get/test/http/1.1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:12] "Get/test/http/1.1" 200 126 0,000998
127.0.0.1 - - [2016-10-24 20:45:13] "Get/test/http/1.1" 200 126 0,001001
127.0.0.1 - - [2016-10-24 20:45:14] "Get/test/http/1.1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:14] "Get/test/http/1.1" 200 126 0.001014
127.0.0.1 - - [2016-10-24 20:45:15] "Get/test/http/1.1" 200 126 0,001000
127.0.0.1 - - [2016-10-24 20:45:15] "Get/test/http/1.1" 200 126 0,000000
127.0.0.1 - - [2016-10-24 20:45:18] "Get/asyn/http/1.1" 200 126 10.000392
Das obige ist der gesamte Inhalt dieses Artikels über Flasks Implementierung einer asynchronen Analyse für nicht blockierende Request-Funktionsfunktionen. Ich hoffe, dass dies für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!