python - 单个 Flask 进程接收多少并发请求?

标签 python flask wsgi gunicorn

我正在使用 Flask 构建一个应用程序,但我对 WSGI 及其 HTTP 基础 Werkzeug 了解不多。当我开始为具有 gunicorn 和 4 个工作进程的 Flask 应用程序提供服务时,这是否意味着我可以处理 4 个并发请求?

我的意思是并发请求,而不是每秒请求数或其他任何内容。

最佳答案

在运行开发服务器时 - 这就是您通过运行 app.run() 获得的结果,您将获得一个同步进程,这意味着一次最多处理 1 个请求。

通过在其默认配置中将 Gunicorn 放在其前面并简单地增加 --workers 的数量,您得到的本质上是许多进程(由 Gunicorn 管理),每个进程的行为类似于app.run() 开发服务器。 4 个工作人员 == 4 个并发请求。这是因为 Gunicorn 默认使用其包含的 sync 工作类型。

值得注意的是,Gunicorn 还包括异步工作程序,即 eventletgevent(还有 tornado,但最好与Tornado 框架,似乎)。通过使用 --worker-class 标志指定这些异步 worker 之一,您将得到 Gunicorn 管理多个异步进程,每个进程管理自己的并发。这些进程不使用线程,而是使用协程。基本上,在每个进程中,一次仍然只能发生一件事(1 个线程),但对象在等待外部进程完成时可以“暂停”(想想数据库查询或等待网络 I/O)。

这意味着,如果您使用 Gunicorn 的一个异步工作器,每个工作器一次可以处理多个请求。多少 worker 是最好的取决于你的应用程序的性质、它的环境、它运行的硬件等等。更多细节可以在 Gunicorn's design 上找到。页和 notes on how gevent works在其介绍页面上。

关于python - 单个 Flask 进程接收多少并发请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10938360/

相关文章:

python - Scapy:使用 post_build 函数构建后更新字段

python - 未能结束 Flask 应用程序

python - 为什么 list() 与一个对象分别显示不同的结果?

python - 根据当前时间戳获取会计年度-python

python - Flask 上传照片类

python - Django 自定义管理 admin.site.register + admin.site.unregister 在第一个 HTTP GET 上与 AlreadyRegistered + NotRegistered 发生冲突(Apache + mod WSGI)

python - `uwsgi_modifier1 30` 指令没有按照记录从 PATH_INFO 中删除 SCRIPT_NAME

python - 关于一个简单的 python wsgi 服务器(wsgiref.simple_server)的困惑

python - 快速切片数据集并存储在新的数据框中?

python - WTForms:同一页面上的两种形式?