首页 > 解决方案 > gunicorn 和以编程方式启动 wsgi 服务器有什么区别?

问题描述

我想知道使用 eventlet 工作者启动 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 性能更高,但为什么呢?有什么区别?如果我必须以编程方式进行,我会遇到性能问题吗?

标签: pythongunicorneventlet

解决方案


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

你选择哪一个取决于你的具体需求,取决于你的部署目标(可以安装什么)、你的内存和 CPU 限制、具体实现的性能指标、实现提供的具体功能、项目安全记录(项目是否支持生产中的部署、引发的安全问题的数量、对安全问题的响应时间)等。我们无法为您做出选择。

另见:

  • 这个 WSGI 服务器概述,它推荐 Gunicorn 作为一个很好的起点,但有一个可供您选择的更多选项的候选清单。
  • 这个WSGI 服务器的两部分概述(请务必阅读第 2 部分以进行性能分析),其中涵盖了服务器的不同子集。但是我必须注意,它bjoern已经有一段时间没有更新了,因为一个项目需要更多的 Python 知识才能正确设置。

推荐阅读