m2wsgi is een Python module die een WSGI gateway handler voor de Mongrel2 webserver, waardoor eenvoudige implementatie van Python apps op Mongrel2 & nbsp;. Het is misschien ook de ondersteunende lessen nuttig zijn voor het ontwikkelen van niet-WSGI handlers in Python.
Command-line gebruik
De eenvoudigste manier om dit pakket te gebruiken is als een command-line launcher:
python -m m2wsgi dotted.app.name tcp: //127.0.0.1: 9999
Dit zal verbinden met Mongrel2 op de opgegeven verzoek poort en start de behandeling van verzoeken door ze door de opgegeven WSGI app. Standaard krijgt u een enkele draad werknemer de behandeling van alle aanvragen te krijgen; verhoging van het aantal draden als volgt:
python -m m2wsgi --num-draden = 5 dotted.app.name tcp: //127.0.0.1: 9999
Of als draden zijn niet uw ding, gebruiken eventlet om de bits rond shuffle als volgt:
python -m m2wsgi --io = eventlet dotted.app.name tcp: //127.0.0.1: 9999
Ik ben geïnteresseerd in het toevoegen van ondersteuning voor andere IO modules zoals gevent; bijdragen te verwelkomen.
Programmatische Gebruik
Als u meer ingewikkelde behoeften, kunt u m2wsgi gebruiken vanuit uw toepassing. De belangrijkste les is 'WSGIHandler', die een eenvoudige server-interface biedt. Het equivalent van de bovenstaande command-line gebruik is:
van m2wsgi.base import WSGIHandler
handler = WSGIHandler (my_wsgi_app, "tcp: //127.0.0.1: 9999")
handler.serve ()
Voor een betere controle over de verbinding tussen uw handler en Mongrel2, creëer je eigen Connection object:
van m2wsgi.base import WSGIHandler, Verbinding
conn = Verbinding (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 ()
Hebben we niet al een van deze?
Verschillende eigenlijk:
& Nbsp; * https://github.com/berry/Mongrel2-WSGI-Handler
& Nbsp; * https://bitbucket.org/dholth/mongrel2_wsgi
Geen van hen voldeed volledig aan mijn behoeften. In het bijzonder, dit pakket heeft transparante ondersteuning voor:
& Nbsp; * chunked reactie encoding
& Nbsp; * "async uploaden" van de grote aanvraag lichamen
& Nbsp; * pluggable IO backends (bijv eventlet, gevent)
Het is ook ontworpen vanaf de grond opgebouwd specifiek voor Mongrel2. Dit betekent dat het krijgt veel functionaliteit voor gratis, en de code is eenvoudiger en lichter als gevolg.
Zo is er geen expliciete beheer van een ThreadPool en verzoek wachtrij als je zou vinden in bv de cherrypy server. In plaats daarvan, je gewoon opstarten zo veel threads als je nodig hebt, hebben ze allemaal aan te sluiten op dezelfde handler socket, en mongrel2 (via ZMQ) automatisch laden-balans van de verzoeken aan hen.
Ook is er geen expliciete steun voor het herladen wanneer de code verandert. Gewoon dood de oude handler en het opstarten van een nieuwe. Als u gebruik maakt vaste handler UUIDs dan zal ZMQ ervoor te zorgen dat de overdracht gebeurt sierlijk
Eisen .
- Python
Beperkingen
- Bij het uitvoeren van meerdere threads, ctrl-C niet netjes het proces af te sluiten. Het lijkt erop dat de achtergrond discussies komen te zitten in een blokkerende recv ().
- De ZMQ load-balancing algoritme is hebzuchtig round-robin, wat niet ideaal is. Bijvoorbeeld kan het schema verschillende fast verzoeken dezelfde draad als een langzame, waardoor ze wachten zelfs als andere threads beschikbaar. Ik ben bezig met een ZMQ adapter die iets beter kunnen doen.
Reacties niet gevonden