繁体   English   中英

gunicorn和以编程方式启动wsgi服务器之间有什么区别?

[英]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示例。

此处的其他答案与一些不错的资源链接,可用于学习有关选项的信息。

实际上,它的性能以及系统管理流程的方式,您应该考虑评估eventlet.wsgi vs gunicorn的关键指标是:

  • 服务请求
  • 潜伏
  • 内存使用
  • CPU使用率
  • 错误率

您可以在此处阅读更多有关python wsgi服务器基准测试的信息,并找出能够比较您想要定义的服务器的人。

同样,与此相关,在生产环境上部署时,应考虑流程控制

gunicornwsgi模块都是托管Python应用程序的标准的实现。 该标准称为Web服务器网关接口或WSGI 还有更多这样的实现

选择哪种选项取决于您的特定需求,取决于您的部署目标( 可以在此处安装什么),内存和CPU约束,特定实施的性能指标,实施提供的特定功能,项目安全记录(是否提供项目支持)生产部署,引发的安全问题数量,对安全问题的响应时间等)。我们无法为您做出选择。

另请参阅:

  • 此WSGI服务器概述 ,推荐Gunicorn作为一个很好的起点,但有一个简短的清单供您选择。
  • WSGI服务器的这一分为两部分的概述 (请确保阅读第二部分以进行性能分析),其中涵盖了服务器的不同子集。 但是,我必须指出, bjoern已有一段时间没有更新,并且由于一个项目将需要更多的Python知识才能正确设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM