2012-06-13 6 views
18

Korzystam z gevent w mojej aplikacji Python (oparty na Django). Jednak teraz zastanawiam się, jak uruchomić go w produkcji. Jakiego serwera powinienem użyć? Podczas rozwoju używam gevent.pywsgi, ale czy to jest gotowe do produkcji? Słyszałem również o gunicorn, ale widziałem o tym trochę ładnego bad benchmarks.Jak uruchomić gevent w produkcji

Uwaga: potrzebuję protokołu SSL.

+4

Dwie kwestie dotyczące tego testu porównawczego. 1.) Test gunicorn używa domyślnego pracownika synchronizacji, a nie gevent worker, którego chcesz użyć. 2.) Z podsumowania "Jeśli jest jedna rzecz, która sprawiła, że ​​ten wzorzec jest jasny, to to, że większość serwerów Python Web oferuje znakomitą wydajność i jeśli czujesz, że rzeczy są wolne, pierwszą rzeczą, na którą warto zwrócić uwagę, jest naprawdę twoja własna aplikacja." –

+8

Zobacz odpowiedź na podobne pytanie (http://stackoverflow.com/questions/7855343/run-web-app-with-gevent/7857201#7857201), autor gevent sam mówi, w skrócie, "Użyj gunicorn. " – akent

Odpowiedz

26

Gunicorn to naprawdę najlepsza opcja. Jest szybki, jest napisany w czystym pythonie (co ułatwia wdrażanie w usługach hostowanych, takich jak Heroku), jest dobrze utrzymany i używany w wielu aplikacjach internetowych Python.

Domyślnie Gunicorn używa synchronicznej klasy robotniczej do obsługi żądań, ale można ją łatwo skonfigurować do korzystania z geventu, dodając po prostu -k gevent do komendy uruchomienia.

Krótka notka: należy zawsze uruchamiać gunicorn za serwerem proxy, takim jak NGINX, Varnish, itp., Ponieważ pozwoli to obsłużyć znacznie więcej próśb niż może inaczej, z powodu buforowania odpowiedzi.

+4

Widziałem, że muszę wyłączyć buforowanie, jeśli używam go z gevent. Czy anuluje korzyści płynące z Nginx? – Flavien

+0

Jaki jest sens korzystania z protokołu HTTP na serwerze wewnętrznym? W przeciwieństwie do FastCGI, SCGI i uwsgi, protokół HTTP nie został zaprojektowany do komunikacji między front-end a back-end i używanie go do tego celu ma swoje ograniczenia i problemy. –

+0

Uważam, że nie musisz się martwić uruchamianiem z odwrotnym proxy, takim jak nginx, gdy używasz Heroku, ponieważ siatka routingu go obsługuje. – dhackner