[英]What's the difference between gunicorn and starting an wsgi server programmatically?
我想知道使用eventlet worker启动gunicorn WSGI服务器有什么区别
gunicorn --workers=2 -k eventlet test:app
然后像这样以编程方式启动wsgi服务器
from eventlet import wsgi
import eventlet
def hello_world(env, start_response):
start_response('200 OK', [('Content-Type', 'text/plain')])
return ['Hello, World!\r\n']
wsgi.server(eventlet.listen(('', 8090)), hello_world)
我猜Gunicorn的表现更好,但为什么呢? 有什么区别? 如果我必须以编程方式进行操作,是否会遇到性能问题?
一个很大的不同是, 古尼康公司分叉了工人的工作流程 。 在您的示例中,您传递了参数--workers=2
,它将产生2个工作进程。 由于Python具有全局解释器锁(GIL) ,因此运行Eventlet的单个进程无法利用多个处理器核心的性能,而由gunicorn生成的多个工作进程则可以。 如果您的应用程序占用大量CPU,则可能会大大提高性能。 当然,您可以自己启动多个进程,例如eventlet.wsgi示例。
此处的其他答案与一些不错的资源链接,可用于学习有关选项的信息。
gunicorn
和wsgi
模块都是托管Python应用程序的标准的实现。 该标准称为Web服务器网关接口或WSGI 。 还有更多这样的实现 。
选择哪种选项取决于您的特定需求,取决于您的部署目标( 可以在此处安装什么),内存和CPU约束,特定实施的性能指标,实施提供的特定功能,项目安全记录(是否提供项目支持)生产部署,引发的安全问题数量,对安全问题的响应时间等)。我们无法为您做出选择。
另请参阅:
bjoern
已有一段时间没有更新,并且由于一个项目将需要更多的Python知识才能正确设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.