Könnten Sie detailliertere Unterschiede zwischen mod_wsgi und werkzeug erklären? (SOS Anfänger)

7

Wie ich im Titel gesagt habe, fühle ich mich im Moment ziemlich unwohl über das grundlegende Verständnis von ihnen.

Soweit ich weiß, hat mod_wsgi die WSGI-Spezifikation implementiert, die unter dem Apache-Webserver ausgeführt werden kann.

Es wurde in C Sprache codiert.

Ein anderes, Werkzeug ist eine Art Toolkit mit nützlichen Hilfsprogrammen. Ich habe auch überprüft, dass Werkzeug einfachen Dienst ausführen kann, der in seinen Quellen implementiert wird (make_server in serving.py). Ich bin mir bewusst, dass Werkzeug nützliche Funktionen und einfache Serverfunktion hat.

Was ich es wissen will, das unten.

Wenn Flask wie Framework auf dem Apache Webserver funktioniert, was macht mod_wsgi genau?

werkzeug hat auch eine grundlegende http-Server-Funktionalität, die mod_wsgi nicht unterstützt werden muss.

Kann jemand die Unterschiede zwischen mod_wsgi und werkzeug erklären?

mod_wsgi und werkzeug hat Features aus der Perspektive des Webservers dupliziert.

    
user1713464 02.10.2012, 04:22
quelle

2 Antworten

20

WSGI steht für "Web Server Gateway Interface", (meistens) definiert durch PEP 333 bei Ссылка .

Es ist eine Bemühung der Python-Gemeinschaft, einen Standardmechanismus für Webserver zu schaffen, um mit Python-Anwendungen zu sprechen.

Theoretisch sollte jeder wsgi-kompatible Server (oder Erweiterung eines bestehenden Webservers) in der Lage sein, eine beliebige wsgi-kompatible Anwendung zu laden und auszuführen.

werkzeug ist ein Web Application Framework, das unter einem konformen WSGI-Server wie Apache + mod_wsgi laufen kann. Es enthält auch einen integrierten Entwicklungsserver, den Sie für die Entwicklung verwenden können.

WSGI kann anfangs sehr verwirrend sein, aber es ist eigentlich ziemlich einfach. Die WSGI-Spezifikation erfordert, dass Ihre Python-Anwendung die folgenden Schritte ausführt:

  1. definiert eine aufrufbare Datei namens application
  2. sagte called sollte 2 Parameter akzeptieren: ( environ , start_response )
  3. environ ist ein Wörterbuch der Umgebungsvariablen
  4. start_response ist ein Aufruf, der aufgerufen werden muss, um die Antwort
  5. zu starten

Sobald application aufgerufen wird, verarbeitet es die Anfrage, erstellt die Ausgabe und:

  1. ruft start_response('200 OK', Headers) auf
  2. return [content]

Eine einfache WSGI-App könnte so aussehen:

%Vor%

Es wird dringend empfohlen, ein vorhandenes WSGI-Framework zu verwenden, da viele Details beim Parsen von HTTP-Anfragen, beim Hochladen von Dateien, beim Codieren von Zeichen usw. erforderlich sind.

Sehen Sie sich Flasche, Flasche, Werkzeug, AppStruct, etc ... an.

    
gahooa 02.10.2012 04:37
quelle
12

mod_wsgi ist ein wsgi-kompatibles Python-Modul, das Python und Apache überbrückt. Damit können Sie Anwendungen ausführen, die in der wsgi-Spezifikation unter Apache codiert sind.

werkzeug ist eine wsgi-Dienstprogrammbibliothek, die zum Erstellen von wsgi-kompatiblen Anwendungen verwendet wird. Es wird mit einem Entwicklungsserver ausgeliefert.

Es gibt eine Handvoll Python-Webanwendungs-Frameworks: Pyramide / Pylone, Flask, Flasche, Django, CherryPy, usw. Sie implementieren alle die WSGI-Spezifikation, die der De-facto-Standard zum Erstellen von Webanwendungen in Python (< a href="http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface"> Ссылка )

Die meisten Webanwendungs-Frameworks werden mit einem Debug-only- oder einem produktionsfähigen Webserver ausgeliefert. Wenn Sie eine WSGI-App haben, können Sie über die App der Bibliothek, über Apache via mod_wsgi oder über einen 'reinen' wsgi-Server wie uWSGI , gunicorn , fapws oder twisted .

Die meisten Leute, die ich kenne, werden eine wsgi-App wie folgt bereitstellen:

  • Ein leichter Server, wie nginx, hört port80
  • Der Lightweight-Server bedient selbst statische Dateien
  • Der Lightweight Server proxies uWSGI Anfragen an einen anderen Server, der oft uWSGI ist, aber manchmal apache + mod_wsgi oder andere. Je nach Konfiguration kann das Proxying entweder ein HTTP-Proxy sein oder direkt oder über einen Socket mit dem uWSGI-Server verbunden sein.

Mit dem gesagt, um Ihre Frage speziell zu beantworten, lesen Sie den ersten Absatz dieser Doku-Seite - Ссылка :

  
    

Es gibt viele Möglichkeiten, eine WSGI-Anwendung zu bedienen. Während Sie es entwickeln, möchten Sie in der Regel keinen vollständigen Webserver wie Apache einrichten, sondern einen einfachen eigenständigen Webserver. Aus diesem Grund kommt Werkzeug mit einem eingebauten Entwicklungsserver.

  

Aus Entwicklungsgründen oder auf einer sehr verkehrsarmen Site können Sie einfach den Werkzeug-Server verwenden. Wenn Sie eine Anwendung bereitstellen, die eine angemessene Menge an Datenverkehr erhält, möchten Sie etwas robusteres.

mod_wsgi oder uWSGI duplizieren die Serving Features von Werkzeug, aber sie tun es, weil sie es wesentlich besser machen können - schnellere Antwortzeiten, weniger Speicher, bessere Parallelität, stabiler, etc etc usw. der Werkzeug Server ist "gut genug" für viele Zwecke, aber es ist nicht "der beste Weg", eine wsgi-konforme App zu bedienen.

    
Jonathan Vanasco 02.10.2012 05:06
quelle

Tags und Links