2011-10-21 10 views
14

Chcę spróbować grać z geventem jako serwerem sieciowym i aplikacją. Nie widzę sposobu, aby "zrestartować" serwer lub zaktualizować kod aplikacji bez zabijania i ponownego uruchamiania całej aplikacji Pythona.uruchom aplikację internetową z geventem

Czy tak się stało? Może to tylko kwestia zrozumienia przeze mnie innego paradygmatu na drodze Apacza.

Ponadto, jako częściowo powiązane pytanie, dobrym pomysłem jest uruchomienie serwera WWW ORAZ samej witryny/usługi za pośrednictwem gevent. Widziałem inne implementacje wykorzystujące gunicorn dla serwera i gevent dla aplikacji, ale z benchmarków, które widziałem, gevent znacznie przewyższa gunicorn jako serwer, jeśli chodzi o skalowanie.

+2

Jednym z rozwiązań, jeśli chcesz uruchomić gevent bezpośrednio, ale zachować serwer, nawet podczas aktualizacji jest umieszczenie równoważenia obciążenia przed dwiema instancjami gevent. Nginx może działać jako load-balancer po prostu mając dwa serwery w definicji upstream. Po ponownym uruchomieniu jednego serwera gevent wsgi nie ma przestojów. Jednak niewielka przewaga w zakresie pamięci w porównaniu z działającym gunicornem nie jest warta w dłuższej perspektywie ze względu na dodatkową złożoność, imho. –

+0

@DanielEriksson Dobra sugestia. – Endophage

Odpowiedz

23

Gunicorn ma 3 pracowników gevent:

  • -k gevent (używając HTTP parser gunicorn'S)
  • -k gevent_pywsgi (za pomocą modułu gevent.pywsgi)
  • -k gevent_wsgi (za pomocą modułu gevent.wsgi)

gevent.wsgi to szybki serwer HTTP oparty na libevent.

gevent.pywsgi to serwer WSGI zaimplementowany w Pythonie.

Powodem istnienia gevent.pywsgi jest libevent-http mający few limitations, taki jak nie wspierający podtrzymywania, przesyłania strumieniowego, ssl i stron internetowych.

Należy zauważyć, że nowy alpha version (1.0a3) of gevent używa libev i nie zawiera serwera WSGI opartego na libevent-http. Obecnie gevent.wsgi jest tutaj aliasem dla gevent.pywsgi.

Klasy serwerów w geventie nie mają żadnych funkcji związanych z zarządzaniem procesami, restartem, ponownym ładowaniem itd. Te funkcje są jednak niezbędne do wdrożenia. Gunicorn zapewnia to dla serwerów WSGI gevent. Użyj tego.