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

时间:2018-07-24 09:23:05

标签: python gunicorn eventlet

我想知道使用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)

我猜古尼康表现更好,但为什么呢?有什么区别?如果我必须以编程方式进行操作,是否会遇到性能问题?

3 个答案:

答案 0 :(得分:1)

一个很大的不同是gunicorn forks worker processes。在您的示例中,您传递了参数--workers=2,它将产生2个工作进程。由于Python具有Global Interpreter Lock (GIL),因此运行Eventlet的单个进程无法利用多个处理器内核的性能,而由gunicorn生成的多个工作进程则可以。如果您的应用程序占用大量CPU,则可能会大大提高性能。当然,您可以自己启动多个进程,例如您的eventlet.wsgi示例。

这里的其他答案与一些有用的资源相关联,用于学习这些选项。

答案 1 :(得分:0)

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

  • 已处理的请求
  • 等待时间
  • 内存使用
  • CPU使用率
  • 错误率

您可以了解有关某些python wsgi服务器基准测试here的更多信息,并找到能够比较您想要定义的服务器的人。

与此相关,在生产环境中部署时,您应该考虑process control

答案 2 :(得分:0)

gunicornwsgi模块都是用于托管Python应用程序的标准的实现。该标准称为Web Server Gateway Interface, or WSGI。有many more such implementations

选择哪种选项取决于您的特定需求,取决于您的部署目标(可以在其中安装 ),内存和CPU限制,特定实现的性能指标,实现的特定功能报价,项目安全记录(项目是否支持生产中的部署,提出的安全问题数量,对安全问题的响应时间等)。我们无法为您做出选择。

另请参阅: