如何在生产环境中运行gevent

26
我正在我的Python应用程序(基于Django)中使用gevent。然而,我现在想知道如何在生产环境中运行它。我应该使用什么服务器?在开发过程中,我使用gevent.pywsgi,但它是否可以用于生产?我也听说过gunicorn,但我看到了一些相当糟糕的基准测试

注意:我需要SSL。


5
关于这个基准测试,有两点需要注意。1. gunicorn测试使用的是默认的同步工作进程,而不是您想要使用的gevent工作进程。2. 从摘要中可以看出:“如果有一件事可以使这个基准测试更加清晰,那就是大多数Python Web服务器都提供了出色的性能,如果您觉得速度很慢,第一件要考虑的事情实际上是您自己的应用程序。” - Mark Lavin
9
参考类似问题的答案(https://dev59.com/22sz5IYBdhLWcg3wfn-6#7857201),gevent的作者本人简而言之说:“使用gunicorn。” - akent
1个回答

38

Gunicorn是最佳的选择。它运行速度快,使用纯Python编写(这使得在托管服务如Heroku上部署变得容易),并且得到良好维护,被广泛用于许多Python Web应用。

Gunicorn默认使用同步工作进程来提供请求响应,但可以通过简单地添加-k gevent到运行命令来轻松配置为使用gevent。

请注意:您应该始终将gunicorn运行在像NGINX、Varnish等代理后面,因为这将允许gunicorn处理更多的请求,原因是响应缓冲。


7
如果我使用gevent,我需要禁用缓冲,这样做会取消Nginx的好处吗? - Flavien
1
在后端服务器上使用HTTP的意义是什么?与FastCGI、SCGI和uwsgi不同,HTTP并非为前端到后端通信而设计,因此将其用于此目的具有其局限性和问题。 - Alex K
我相信当你使用Heroku时,不需要担心像nginx这样的反向代理的运行,因为路由网格会处理它。 - dhackner
1
只有当你在做流媒体相关的东西,比如长轮询、彗星等等时,才需要使用@Flavien。 - twneale
1
你好,kworker-class这两个标志有什么区别?请参考:https://docs.gunicorn.org/en/stable/run.html?highlight=worker-class#commonly-used-arguments - hafiz031
1
@hafiz031 没有区别,一个是选项的短版本,另一个是长版本,因此您可以使用任何一个 (https://superuser.com/questions/174564/why-are-there-short-and-long-alternatives-for-command-line-options)。 - shaye059

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接