2011-10-21 154 views
14

我想嘗試使用gevent作爲Web服務器和應用程序框架。我沒有看到任何方法來「重新啓動」服務器或更新應用程序代碼,而無需再次啓動整個python應用程序。用gevent運行web應用程序

這就是這麼做的嗎?也許這只是我理解apache方式的一個不同範例的問題。

此外,作爲一個半相關問題,通過gevent運行Web服務器和站點/服務本身是一個好主意。我已經看到其他實現使用gunicorn作爲服務器和應用程序的gevent,但是從我所見過的基準測試中,當涉及到擴展時,gevent遠遠勝過gunicorn作爲服務器。

+2

如果您想直接運行gevent,但即使在升級過程中保持服務器可用,一種解決方案是將負載均衡器放在兩個gevent實例之前。 Nginx可以充當負載平衡器,只需在上游定義中有兩臺服務器即可。通過重新啓動一個gevent wsgi服務器,您不會停機。然而,與運行gunicorn相比,內存佔用的小優勢從長遠來看並不值得,因爲增加了複雜性,恕我直言。 –

+0

@DanielEriksson好的建議。 – Endophage

回答

23

Gunicorn具有3名GEVENT工人:

  • -k GEVENT(使用gunicorn的HTTP解析器)
  • -k gevent_pywsgi(使用gevent.pywsgi模塊)
  • -k gevent_wsgi(使用gevent.wsgi模塊)

gevent.wsgi是基於libevent的快速HTTP服務器。

gevent.pywsgi是在Python中實現的WSGI服務器。

gevent.pywsgi存在的原因是libevent-http有few limitations,比如不支持keep-alive,streaming,ssl和websockets。

請注意,新的alpha version (1.0a3) of gevent使用libev並且不包括基於libevent-http的WSGI服務器。目前,gevent.wsgi是gevent.pywsgi的別名。

gevent中的服務器類沒有任何與進程管理,重新啓動,重新加載等相關的功能。這些功能雖然是部署所必需的。 Gunicorn爲Gevent的WSGI服務器提供。用它。