使用gevent运行web应用
我想试着用gevent来搭建一个网页服务器和应用框架。不过我发现似乎没有办法“重启”服务器或者更新应用代码,而是必须杀掉整个Python应用再重新启动。
这就是常规做法吗?也许我只是需要理解一种和apache不一样的思路。
另外,稍微相关的问题是,直接用gevent来运行网页服务器和网站/服务本身是否是个好主意。我见过一些其他的做法是用gunicorn做服务器,用gevent来处理应用,但从我看到的基准测试结果来看,gevent在扩展性方面的表现远远超过gunicorn作为服务器的表现。
1 个回答
27
Gunicorn有三种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有一些局限性,比如不支持保持连接、流式传输、SSL和WebSocket。
需要注意的是,新的gevent alpha版本(1.0a3)使用了libev,并且不包含基于libevent-http的WSGI服务器。目前,这里的gevent.wsgi是gevent.pywsgi的别名。
gevent中的服务器类没有与进程管理、重启、重新加载等相关的功能。这些功能在部署时是必要的。不过,Gunicorn为gevent的WSGI服务器提供了这些功能。记得使用它。