Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung von 9 Bereitstellungsmethoden für Python-Webprogramme

Zusammenfassung von 9 Bereitstellungsmethoden für Python-Webprogramme

不言
不言Original
2018-04-16 17:01:521540Durchsuche

Python verfügt über viele Webentwicklungs-Frameworks. Nachdem der Code geschrieben wurde, ist die Bereitstellung und der Start im Allgemeinen eine dreistufige Struktur von Webservern ---->Anwendung -----> ; DB-Server

Sie können die Mainstream-Webserver mit einem Schlag zählen, Apache, Lighttpd, Nginx, IIS

Anwendung, der chinesische Name heißt Anwendungsdienst, das ist der Anwendungscode, den Sie schreiben Basierend auf einem bestimmten Web-Framework. MySQL wird hauptsächlich in der Webentwicklung verwendet. Aufgrund der Erweiterung der Website-Skala sind auch Schlüsselwertspeicher wie Memcache und Redis populär geworden > Der an der Vorderseite platzierte Webserver hat 3 Funktionen

Verarbeiten Sie statische Dateien effizient. Der Webserver ist in C entwickelt, ruft native Funktionen auf und IO und Dateiübertragung werden entsprechend optimiert

Funktioniert als Eine einfache Netzwerk-Firewall, Sie können sich vorstellen, dass einige IPs, die einfach die Anzahl gleichzeitiger Verbindungen usw. steuern, besser als nichts sind

Verarbeitung hoher gleichzeitiger kurzer Verbindungsanfragen und Weiterleitung von Anfragen von Tausenden von Benutzern über Dutzende lange Ein Grund dafür ist, dass der Webserver sehr professionell mit hoher Parallelität umgeht. Ein weiterer Grund ist, dass die von den meisten Anwendungen verwendeten Frameworks nicht in der Lage sind, hohe Parallelität zu verarbeiten.

Tatsächlich sind es einige Web-Frameworks Auf dem Markt gibt es integrierte Unterstützung für Epoll/Kqueue usw. Effiziente Netzwerkbibliotheken können mit hoher Parallelität umgehen, z. B. Pythons Tornado, Java-basierter Tomcat, Jetty usw. Einige Leute entfernen den Front-End-Webserver und Bei der Bereitstellung öffentlicher Netzwerkanwendungen ist es jedoch am besten, dies nicht zu tun. Aufgrund der beiden oben genannten Gründe 1 und 2 sind die Netzwerkbedingungen vom Benutzerbrowser bis zum Webserver sehr seltsam Kann ich mir nicht vorstellen.

Der Webserver empfiehlt dringend die Verwendung von Nginx aus drei Gründen

Ausgezeichnete Leistung und sehr stabil

Einfach zu installieren, mit wenigen abhängigen Paketen
Die conf-Datei ist Sehr einfach zu konfigurieren, einfacher als Apache/lighttpd
Es gibt 9 Möglichkeiten, in Python entwickelte Webprogramme

mod_python, dies ist ein integriertes Modul von Apache. Es hängt stark von der Python-Version mod_python ab wird mit kompiliert.

CGI ist zu alt und wird nicht empfohlen. Nginx unterstützt keine CGI-Methode. Sie können nur Lighttpd oder Apache verwenden >fastcgi. Dies ist derzeit die beliebteste Methode, die vom flup-Modul unterstützt wird. Die entsprechende Konfigurationsanweisung in nginx ist fastcgi_pass

spawn-fcgi , das ist das fastcgi-Multiprozess-Verwaltungsprogramm, das mit dem lighttpd geliefert wird Installationspaket. Es hat den gleichen Effekt wie flup. Der Unterschied besteht darin, dass flup auf der Python-Codeebene eingeführt wird und spawn-fcgi ein externes Programm ist. spawn-fcgi ist sehr vielseitig und kann Code unterstützen, der in jeder Sprache wie PHP, Python und Perl entwickelt wurde. Solange Ihr Code die Fastcgi-Schnittstelle implementiert, kann es Ihnen bei der Verwaltung Ihres Prozesses

scgi helfen Der vollständige Name lautet Simple Common Gateway Interface und ist meiner Meinung nach eine sehr einfache Version von fastcgi. Der entsprechende Konfigurationsbefehl von nginx ist jedoch nicht verfügbar es, wenn Sie möchten, unterstützt es auch.

HTTP, Nginx verwendet Proxy_Pass-Weiterleitung. Dies erfordert, dass die Back-End-Anwendung über einen integrierten HTTP-Server verfügt, der eine hohe Parallelität verarbeiten kann. Im Python-Webframework ist die einzige Option Tornado.

Python-Programmierer erfinden gerne das Rad. Tornado ist nicht nur ein Web-Framework, sondern kann auch unabhängig einen leistungsstarken HTTP-Server bereitstellen. Wenn Sie also andere Python-Frameworks zum Schreiben von Code verwenden, können Sie dies tun Starten Sie auch einen leistungsstarken Tornado-Server, der auch über das HTTP-Protokoll und Nginx bereitgestellt werden kann. Darüber hinaus gibt es im Python-Paket viele http-Server, die eine hohe Parallelität verarbeiten können, z. B. gevent, auf den auch andere Frameworks verweisen können, um die http-Bereitstellung zu unterstützen.

In Wirklichkeit werden bei der Verwendung von Java zum Erstellen von Webprogrammen normalerweise http und nginx verwendet. Der Anwendungsserver wählt Tomcat oder Jetty

uwsgi, das aus 4 Teilen besteht:

uwsgi-Protokoll

Integriertes Webserver-Unterstützungsprotokollmodul

Anwendungsserverprotokoll-Unterstützungsmodul

Prozesssteuerungsprogramm

nginx verfügt über integrierte Unterstützung für das uwsgi-Protokoll ab 0.8.4. Das uwsgi-Protokoll ist sehr einfach, mit 4 Wörtern pro Stanza-Header + einem Body. Der Body kann ein Paket aus vielen Protokollen wie http, cgi usw. sein (markiert durch Felder im Header). Der Leistungsvergleichstest zeigt, dass uwsgi im Vergleich zu fastcgi keine Leistung aufweist. Der offensichtliche Vorteil kann auch auf den kleineren Datensatz zurückzuführen sein.

Das Merkmal von uwsgi ist, dass es ein eigenes Prozesssteuerungsprogramm ist in der C-Sprache und verwendet die Natvie-Funktion. Tatsächlich ist es dasselbe wie spawn-fcgi/php-fpm. Daher kann uwsgi eine Vielzahl von Anwendungsframeworks unterstützen, darunter (Python, Lua, Ruby, Erlang, Go) usw.

Gunicorn, ein uwsgi-ähnliches Tool, wurde aus dem Rails-Bereitstellungstool (Unicorn) übernommen. . Das verwendete Protokoll ist jedoch WSGI, der vollständige Name ist Python Web Server Gateway Interface, der offizielle Standard (PEP 333), der in Python 2.5 definiert ist. Er hat gute Wurzeln und ist relativ einfach bereitzustellen. org/ Es gibt detaillierte Tutorials

mod_wsgi, ein Modul von Apache, das auch das WSGI-Protokoll unterstützt, https://code.google.com/p/modwsgi/

fastcgi-Protokoll und http-Protokoll werden bei der Codebereitstellung verwendet Vergleich der Vor- und Nachteile

Obwohl fastcgi ein Binärprotokoll ist, spart es im Vergleich zum http-Protokoll keine Ressourcen. Das Binärprotokoll kann nur den Ausdruck von Zahlen wie 1234567 speichern. Es werden 7 Bytes benötigt, um es als Zeichenfolge auszudrücken, und 4 Bytes als Zahl, und die Zeichenfolge ist überall gleich

Wenn fastcgi Daten überträgt , in Ordnung Es ist mit dem CGI-Protokoll kompatibel und bringt auch eine Reihe von CGI-Umgebungsvariablen mit. Daher ist die Verwendung von Fastcgi zum Übertragen von Daten nicht wirtschaftlich, aber teurer

Der einzige Vorteil von Bei fastcgi handelt es sich um eine langfristige Verbindung. Wenn der Benutzer 1000 gleichzeitige Anfragen stellt, kann fastcgi 10 Links zur Weiterleitung an die Back-End-Anwendung verwenden. Wenn Sie das http-Protokoll verwenden, können Sie so viele angeben, wie Sie möchten 1000 Anfragen werden an die Back-End-Anwendung

HTTP-Proxy-Weiterleitungsmethode initiiert. Bei extrem hoher Parallelität treten Probleme auf, da der Port im TCP-Protokollstapel eine Ganzzahl vom Typ int16 ist, wenn Sie eine neue erstellen Um eine lokale Verbindung herzustellen, müssen Sie einen Port nutzen, der bis zu 65536 sein kann. Hunderttausende externe gleichzeitige Anfragen, der Portpool ist erschöpft und Ihr Server kann nur die Antwort verweigern

Zusammenfassung

Meine persönliche Angewohnheit ist es, das Fastcgi-Protokoll zum Bereitstellen von Python-Programmen zu verwenden ist einfach und problemlos. Wählen Sie die einfachste und gebräuchlichste Lösung. Das Fastcgi-Laufskript dieses Blogs lautet wie folgt:

kill - `cat / tmp / django.pid`
echo 'restart django....' 
python . / manage.py runfcgi - - settings = lutaf.settings_r maxchildren =  maxspare = minspare =  method = prefork pidfile = / tmp / django.pid host = 127.0 . 0.1  port = outlog = / tmp / dj.out errlog = / tmp / dj.error

Ich empfehle Ihnen, Gunicorn auszuprobieren, das ist die zukünftige Entwicklungsrichtung

Das obige ist der detaillierte Inhalt vonZusammenfassung von 9 Bereitstellungsmethoden für Python-Webprogramme. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn