Python uWSGI Installation und Konfiguration

Dieser Artikel stellt hauptsächlich vor, wie man einfache WSGI-Anwendungen und gängige Web-Frameworks bereitstellt.

Am Beispiel von Ubuntu/Debian installieren Sie zuerst die Abhängigkeitspakete:

apt-get install build-essential python-dev

uWSGI mit Python installieren

1. Mit dem pip-Befehl:

pip install uwsgi

2. Laden Sie das Installationsskript herunter:

curl http://uwsgi.it/install | bash -s default /tmp/uwsgi

Installieren Sie die uWSGI-Binärdatei nach /tmp/uwsgi; Sie können sie ändern.

3. Installation aus dem Quellcode:

wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz
cd uwsgi-latest
make

Nach Abschluss der Installation erhalten Sie eine uwsgi-Binärdatei im aktuellen Verzeichnis.


Die erste WSGI-Anwendung

Beginnen wir mit einem einfachen "Hallo Welt", indem wir die Datei foobar.py mit dem folgenden Code erstellen:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

Die Standardfunktion, nach der der uWSGI-Python-Loader sucht, istapplication 。

Als Nächstes starten wir uWSGI, um einen HTTP-Server auszuführen und das Programm auf HTTP-Port 9090 bereitzustellen:

uwsgi --http :9090 --wsgi-file foobar.py

Hinzufügen von Nebenläufigkeit und Überwachung

Standardmäßig startet uWSGI einen einzelnen Prozess und einen einzelnen Thread.

Sie können die--processesOption verwenden, um weitere Prozesse hinzuzufügen, oder die--threadsOption verwenden, um weitere Threads hinzuzufügen, oder beides gleichzeitig.

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2

Der obige Befehl erzeugt 4 Prozesse mit jeweils 2 Threads.

Wenn Sie Überwachungsaufgaben durchführen müssen, können Sie das Stats-Subsystem verwenden. Das Format der Überwachungsdaten ist JSON:

uwsgi --http :9090 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Wir können uwsgitop installieren (ähnlich dem Linux-Befehl top), um die Überwachungsdaten anzuzeigen:

pip install uwsgitop

Verwendung mit Webservern

Wir können uWSGI zusammen mit dem Nginx-Webserver verwenden, um eine höhere Nebenläufigkeitsleistung zu erzielen.

Eine übliche nginx-Konfiguration sieht wie folgt aus:

location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:3031;
}

Der obige Code zeigt an, dass die von nginx empfangenen Webanfragen zur Verarbeitung an den uWSGI-Dienst auf Port 3031 weitergeleitet werden.

Jetzt können wir uWSGI so erzeugen, dass es das uwsgi-Protokoll lokal verwendet:

uwsgi --socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Wenn Ihr Webserver HTTP verwendet, müssen Sie uWSGI anweisen, das http-Protokoll lokal zu verwenden (dies unterscheidet sich von --http, das einen eigenen Proxy erstellt):

uwsgi --http-socket 127.0.0.1:3031 --wsgi-file foobar.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

Django bereitstellen

Django ist das am häufigsten verwendete Python-Webframework. Angenommen, das Django-Projekt befindet sich unter /home/foobar/myproject:

uwsgi --socket 127.0.0.1:3031 --chdir /home/foobar/myproject/ --wsgi-file myproject/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

--chdirWird verwendet, um den Projektpfad anzugeben.

Wir können den obigen Befehl in eine yourfile.ini-Konfigurationsdatei einfügen:

[uwsgi]
socket = 127.0.0.1:3031
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes = 4
threads = 2
stats = 127.0.0.1:9191

Als Nächstes müssen Sie nur den folgenden Befehl ausführen:

uwsgi yourfile.ini

Flask bereitstellen

Flask ist ein beliebtes Python-Webframework.

Erstellen Sie die Datei myflaskapp.py mit dem folgenden Code:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "<span style='color:red'>I am app 1</span>"

Führen Sie den folgenden Befehl aus:

uwsgi --socket 127.0.0.1:3031 --wsgi-file myflaskapp.py --callable app --processes 4 --threads 2 --stats 127.0.0.1:9191
Weitere Erweiterungen