m2wsgi ist ein Python-Modul, das eine WSGI Gateway-Handler für das Mongrel2 Webserver stellt, was eine einfache Implementierung von Python-Anwendungen auf Mongrel2 & nbsp;. Vielleicht finden Sie auch ihre unterstützenden Klassen für die Entwicklung von nicht-WSGI Handler in Python.
Kommandozeilen-Nutzung
Der einfachste Weg, dieses Paket ist als Kommandozeilen-Startprogramm:
python -m m2wsgi dotted.app.name tcp: //127.0.0.1: 9999
Dies wird zu Mongrel2 auf dem angegebenen Anforderungs-Port anschließen und die Bearbeitung von Anträgen, indem sie durch den angegebenen WSGI App. Standardmäßig erhalten Sie einen einzelnen Worker-Thread die Behandlung aller Anfragen bekommen; erhöhen die Anzahl der Threads wie folgt:
python -m m2wsgi --num-threads = 5 dotted.app.name tcp: //127.0.0.1: 9999
Oder wenn Themen sind nicht Ihr Ding, verwenden eventlet um die Bits um wie so mischen:
python -m m2wsgi --io = eventlet dotted.app.name tcp: //127.0.0.1: 9999
Ich interessiere mich für die Unterstützung für andere IO-Module wie gevent; Beiträge willkommen zu heissen.
programmtechnische Verwendung
Wenn Sie kompliziertere Anforderungen haben, können Sie m2wsgi aus Ihrer Anwendung verwenden können. Die Hauptklasse ist "WSGIHandler ', die eine einfache Server-Schnittstelle zur Verfügung stellt. Der Gegenwert der obigen Befehlszeile Nutzung ist:
von m2wsgi.base Import WSGIHandler
Handler = WSGIHandler (my_wsgi_app "tcp: //127.0.0.1: 9999")
handler.serve ()
Für feinere Kontrolle über die Verbindung zwischen Ihrem Handler und Mongrel2, erstellen Sie Ihre eigenen Connection-Objekt:
von m2wsgi.base Import WSGIHandler, Verbindung
conn = Verbindung (send_spec = "tcp: //127.0.0.1: 9999",
& Nbsp; recv_spec = "tcp: //127.0.0.1: 9999",
& Nbsp; send_ident = "9a5eee79-dbd5-4f33-8fd0-69b304c6035a")
Handler = WSGIHandler (my_wsgi_app, conn)
handler.serve ()
Haben wir nicht bereits über eine von ihnen?
Mehrere tatsächlich:
& Nbsp; * https://github.com/berry/Mongrel2-WSGI-Handler
& Nbsp; * https://bitbucket.org/dholth/mongrel2_wsgi
Keiner von ihnen meine Bedürfnisse voll erfüllt. Insbesondere hat dieses Paket transparente Unterstützung für:
& Nbsp; * chunked Antwortcodierung
& Nbsp; * "async upload" der großen Anfrage Stellen
& Nbsp; * steckbare IO-Backends (zB eventlet, gevent)
Es ist auch von Grund auf speziell für Mongrel2 konzipiert. Das bedeutet, es wird eine Vielzahl von Funktionen kostenlos, und der Code ist einfacher und leichter als Ergebnis.
Zum Beispiel gibt es keine explizite Management eines Threadpool und Anforderungswarteschlange, wie Sie vielleicht in zB finden die CherryPy Server. Stattdessen können Sie einfach starten Sie so viele Themen, wie Sie benötigen, haben sie alle an den gleichen Handler-Buchse, und mongrel2 (via ZMQ) automatisch Lastenausgleich die Anfragen an sie.
Ebenso gibt es keine explizite Unterstützung für die Umladung, wenn der Code verändert. Töte den alten Handler, und starten Sie eine neue. Wenn Sie feste Handler UUIDs sind dann ZMQ wird dafür sorgen, dass die Übergabe geschieht anmutig
Anforderungen .
- Python
Grenzen :
- Bei der Ausführung von mehreren Threads, Strg-C nicht sauber den Prozess zu beenden. Scheint, wie die Hintergrundthreads erhalten in einer Sperr recv fest ().
- Die ZMQ Load-Balancing-Algorithmus ist gierig Round-Robin, das ist nicht ideal. Beispielsweise kann es mehrere Fast-Anfragen an den selben Thread als langsame planen, so dass sie warten, auch wenn andere Threads verfügbar. Ich arbeite an einem ZMQ Adapter, der etwas Besseres tun können, arbeiten.
Kommentare nicht gefunden