Verwenden Sie einen Produktions-WSGI-Server, um eine Flask-App auszuführen

Salman Mehmood 15 Februar 2024
Verwenden Sie einen Produktions-WSGI-Server, um eine Flask-App auszuführen

Mit dieser Erklärung lernen wir den WSGI-Server kennen und sehen, wie er funktioniert. Wir werden auch lernen, wie man einen WSGI-Server erstellt und eine App innerhalb dieses Servers in Flask und Python ausführt.

Erstellen Sie einen WSGI-Server und führen Sie eine App innerhalb des Servers in Flask und Python aus

Das Web Server Gateway Interface, auch bekannt als WSGI, folgt dem Prozess, wenn es die Anfrage vom Client erhält, die auf eine Funktion oder Klasse mit Codezeilen verweist. Jede Codezeile wird nacheinander ausgeführt, und schließlich wird die Antwort an den Client geliefert.

Dann verarbeitet die Anwendung die nachfolgende Anfrage und folgt dem gleichen Prozess, bis der Client eine Antwort erhält.

Prozess der Webserver-Gateway-Schnittstelle 1

Es wird eine Frage zur Webanwendung aufgeworfen: Ist die gesamte Bearbeitung jeweils nur eine Anfrage? Nein, die Mitarbeiter kommen zur Unterstützung und bearbeiten mehrere Anfragen gleichzeitig.

Bei der Bereitstellung von Anwendungen, die auf Django oder Flask basieren, müssen wir die Anzahl der Worker angegeben haben, die Anfragen bearbeiten, was auf WSGI-Servern wie Gunicorn erfolgt. Diese Worker bearbeiten mehrere Anfragen von Kunden gleichzeitig.

Zum Beispiel nehmen wir eine Analogie zur Frühstückszubereitung; In diesem Fall bereitet die Person den Tee zu und die zweite Person macht ein Ei, also arbeiten zwei Arbeiter gleichzeitig in der Küche.

Webserver-Gateway-Schnittstellenprozess 2

Die Frage ist: Können wir angeben, dass Hunderte von Arbeitern gleichzeitig Aufgaben erledigen sollen? Nein, weil es auf die Größe ankommt und wir nur so viele Arbeiter unterbringen können, wie die Küche groß ist.

Ebenso können wir Worker nur so lange einrichten, bis die Serverressourcen erschöpft sind. Für eine bessere Auslastung der Serverressourcen wird eine größere Anzahl von Workern benötigt.

Im Allgemeinen beträgt die empfohlene Anzahl von Workern das Doppelte der Anzahl von CPU-Kernen + 1, also wären es im Fall eines Servers mit 6 CPU-Kernen 13 Worker.

Webserver-Gateway-Schnittstellenprozess – Anzahl der Worker

Nun werden wir sehen, wie Sie eine grundlegende funktionsbasierte Webserver-Gateway-Schnittstelle in Flask erstellen. Zuerst erstellen wir ein Verzeichnis im root-Verzeichnis mit dem Namen web und erstellen eine app.py-Datei in diesem Verzeichnis.

Jetzt müssen wir ein Paket namens wsgiref importieren, um WSGI zu verwenden, was für uns ein guter Anfang ist, um ein WSGI zu erstellen. Jetzt importieren wir die Funktion make_server aus simple_server, wodurch wir einen WSGI-Server erstellen können.

from wsgiref.simple_server import make_server

Als Nächstes erstellen wir unsere Web-App, die eine sehr einfache Möglichkeit zum Erstellen dieser App darstellt. Wir definieren eine Funktion und nennen sie Web_App().

Es benötigt zwei erforderliche Parameter. Der erste ist der environment-Parameter, der eine Variable im CGI-Stil ist.

Der nächste Parameter ist response, und wir wollen natürlich unsere Seite sehen. Außerdem antworten wir in der Antwort normalerweise auf wichtige Informationen mit Headern wie einem HTML-Dokument oder einem Textdokument.

Als Nächstes erstellen wir eine Variable, die unseren Status enthält, eine Zeichenfolge. Wir sagen 200 OK, das muss 4 Zeichen lang sein.

def Web_App(environment, response):
    status = "200 OK"

Jetzt müssen wir Header erstellen, die eine Liste akzeptieren, und ein Tupel wäre ihr Element, da wir mehrere Header innerhalb dieser Liste als ihr Element hinzufügen können. In diesem Tupel deklarieren wir, welche Art von Inhaltstyp wir übergeben.

Jetzt werden wir unsere Antwort mit status und Headern wie folgt festlegen. Und wir machen weiter und bringen unsere Inhalte auf unsere Website zurück.

Der Inhalt wird in Binärdaten zurückgegeben.

headers = [("content-type", "text/html; charset=utf-8")]
response(status, headers)
return [b"<h2>Hi there, this is WSGI server</h2>"]

Lassen Sie uns fortfahren und einen Server mit dem Block with erstellen und die Funktion make_server() mit dieser Anweisung verwenden. Es braucht ein paar Argumente.

Der erste ist der Host, der standardmäßig localhost wäre, weshalb wir eine leere Zeichenfolge belassen. Der nächste ist der Port, der 5000 wäre, und dann müssen wir die Funktion Web_App() im nächsten Argument übergeben.

Dieses Argument dient dazu, unsere App oder andere Inhalte anzuzeigen, die wir bereitstellen möchten. Jetzt drucken wir eine Nachricht an den Benutzer und teilen ihm mit, wo er seine Website finden und wie er den Server verlassen kann.

Jetzt werden wir unseren Server bedienen und die Methode serve_forever() verwenden, was bedeutet, dass wir den Server bedienen, bis wir ihn über das Terminal beenden oder wenn wir irgendwo einen Fehler haben und er sich selbst beendet.

with make_server("", 5000, Web_App) as server:
    print(
        "serving on port 5000...\nvisit http://127.0.0.1:5000\nTo exit press ctrl + c"
    )
    server.serve_forever()

Lassen Sie uns fortfahren und den Server ausführen und dann zu dem Browser gehen, in dem unsere App ausgeführt wird. Wenn wir sie besuchen, sehen wir den Inhalt, der so angezeigt wird, wie wir ihn in unserer App definiert haben.

WSGI-Server zum Ausführen einer Flask-App – Ausgabe

Um mehr über den WSGI-Server zu erfahren, klicken Sie hier, um die offiziellen Dokumente zu lesen.

Vollständiger Python-Code:

from wsgiref.simple_server import make_server


def Web_App(environment, response):
    status = "200 OK"
    headers = [("content-type", "text/html; charset=utf-8")]
    response(status, headers)
    return [b"<h2>Hi there, this is WSGI server</h2>"]


with make_server("", 5000, Web_App) as server:
    print(
        "serving on port 5000...\nvisit http://127.0.0.1:5000\nTo exit press ctrl + c"
    )
    server.serve_forever()
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn