2012-06-13 15 views
18

Ich benutze gevent in meiner Python-Anwendung (Django basiert). Ich frage mich jedoch, wie man es in der Produktion laufen lässt. Welchen Server sollte ich verwenden? Während der Entwicklung verwende ich gevent.pywsgi, aber ist das produktionsbereit? Ich habe auch von Gunicorn gehört, aber ich habe einige schöne bad benchmarks darüber gesehen.Wie gevent in Produktion läuft

Hinweis: Ich brauche SSL.

+4

Zwei Punkte zu diesem Benchmark. 1.) Der Gunicorn-Test verwendet den Standard-Sync-Worker und nicht den Gevent-Worker, den Sie verwenden möchten. 2.) Aus der Zusammenfassung "Wenn es eine Sache gibt, die diesen Benchmark verdeutlicht, ist, dass die meisten Python-Webserver eine großartige Leistung bieten und wenn Sie denken, dass die Dinge langsam sind, ist die erste Sache, die Sie sich anschauen, wirklich Ihre eigene Anwendung." –

+8

Siehe Antwort auf eine ähnliche Frage (http://stackoverflow.com/questions/7855343/run-web-app-with-gevent/7857201#7857201), der Autor von Gevent selbst sagt, in kurzen Worten, "Verwenden Sie Gunicorn. " – akent

Antwort

26

Gunicorn ist wirklich die beste Option. Es ist schnell, es ist in reinem Python geschrieben (was die Bereitstellung auf gehosteten Diensten wie Heroku erleichtert), und es ist gut gepflegt und wird für eine große Anzahl von Python-Webanwendungen verwendet.

Standardmäßig verwendet Gunicorn eine synchrone Worker-Klasse, um Anforderungen zu bedienen, aber es kann leicht konfiguriert werden, gevent zu verwenden, indem einfach -k gevent zum Befehl run hinzugefügt wird.

Nur eine kurze Anmerkung: Sie sollten Gunicorn immer hinter einem Proxy wie NGINX, Varnish, etc. laufen lassen, da Gunicorn dadurch viel mehr Anfragen verarbeiten kann als sonst, aufgrund der Pufferung der Antwort.

+4

Ich habe gesehen, dass ich die Pufferung deaktivieren muss, wenn ich es mit gevent verwende. Macht es die Vorteile von Nginx zunichte? – Flavien

+0

Was ist der Zweck der Verwendung von HTTP auf Back-End-Server? Im Gegensatz zu FastCGI, SCGI und uwsgi wurde HTTP nicht für Front-End- und Back-End-Kommunikation entwickelt, und seine Verwendung für diesen Zweck hat seine Grenzen und Probleme. –

+0

Ich glaube, Sie müssen sich keine Sorgen machen, dass Sie mit einem Reverseproxy wie nginx arbeiten, wenn Sie Heroku verwenden, da das Routing-Mesh es verarbeitet. – dhackner