m2wsgi est un module Python qui fournit un gestionnaire de passerelle WSGI pour le serveur Web Mongrel2, permettant un déploiement facile d'applications Python sur Mongrel2 & nbsp;. Vous pouvez également trouver ses classes de support utile pour développer des gestionnaires non-WSGI en Python.
Utilisation de ligne de commande
La façon la plus simple d'utiliser ce paquet est aussi un lanceur de ligne de commande:
python -m m2wsgi dotted.app.name tcp: //127.0.0.1: 9999
Cela connecter à Mongrel2 sur le port de requête spécifiée et commencer à traiter les demandes en les passant par l'application WSGI spécifié. Par défaut, vous obtiendrez un seul thread de travail traiter toutes les demandes; augmenter le nombre de threads comme ceci:
python -m m2wsgi --num-threads = 5 dotted.app.name tcp: //127.0.0.1: 9999
Ou si les discussions ne sont pas votre truc, utiliser eventlet pour mélanger les morceaux autour comme ceci:
python -m m2wsgi --io = eventlet dotted.app.name tcp: //127.0.0.1: 9999
Je suis intéressé par l'ajout du support pour d'autres modules tels que IO gevent; contributions sont les bienvenus.
Utilisation programmatique
Si vous avez des besoins plus complexes, vous pouvez utiliser m2wsgi partir de votre application. La classe principale est 'WSGIHandler »qui fournit une interface simple serveur. L'équivalent de l'utilisation en ligne de commande ci-dessus est:
de WSGIHandler d'importation m2wsgi.base
gestionnaire = WSGIHandler (my_wsgi_app, "tcp: //127.0.0.1: 9999")
handler.serve ()
Pour un contrôle plus fin sur la connexion entre votre gestionnaire et Mongrel2, créer votre propre objet de connexion:
de WSGIHandler d'importation m2wsgi.base, Connexion
conn = Connection (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")
gestionnaire = WSGIHandler (my_wsgi_app, conn)
handler.serve ()
Ne avons-nous pas déjà l'un de ces?
Plusieurs effectivement:
& Nbsp; * https://github.com/berry/Mongrel2-WSGI-Handler
& Nbsp; * https://bitbucket.org/dholth/mongrel2_wsgi
Aucun d'entre eux totalement répondu à mes besoins. En particulier, cet ensemble a un support transparent pour:
& Nbsp; * chunked encodage de réponse
& Nbsp; * "téléchargement asynchrone" de grands organismes de demande
& Nbsp; * enfichables backends IO (par exemple eventlet, gevent)
Il est également conçu à partir du sol en place spécifiquement pour Mongrel2. Cela signifie qu'il reçoit beaucoup de fonctionnalités gratuitement, et le code est plus simple et plus léger à la suite.
Par exemple, il n'y a pas de gestion explicite d'une file d'attente de threadpool et demande que vous pourriez trouver dans par exemple le serveur CherryPy. Au lieu de cela, vous venez de commencer autant de fils que vous avez besoin, demandez-leur se connectent tous à la même prise de gestionnaire, et mongrel2 (via ZMQ) chargera automatiquement équilibrer les demandes pour eux.
De même, il n'y a pas un soutien explicite pour recharger lorsque le code change. Juste tuer l'ancien gestionnaire et démarrer une nouvelle. Si vous utilisez UUID de gestionnaire fixe puis ZMQ veillera à ce que le transfert se produit gracieusement
Exigences :.
- Python
Limites :
- Lors de l'exécution de plusieurs threads, ctrl-C ne proprement quitter pas le processus. On dirait que les fils de fond coincés dans un recv de blocage ().
- L'algorithme d'équilibrage de charge est ZMQ round-robin gourmande, qui ne est pas idéal. Par exemple, il peut programmer plusieurs demandes rapides à la même thread que lent, faire attendre même si d'autres discussions deviennent disponibles. Je travaille sur un adaptateur de ZMQ qui peut faire quelque chose de mieux.
Commentaires non trouvées