小编典典

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

all

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

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


阅读 180

收藏
2022-08-01

共1个答案

小编典典

当运行开发服务器时——这是你通过运行得到的app.run(),你得到一个同步进程,这意味着一次最多处理一个请求。

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

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

这意味着,如果您使用 Gunicorn
的一个异步工作器,每个工作器一次可以处理多个请求。多少工人最好取决于你的应用程序的性质、它的环境、它运行的硬件等。更多细节可以在Gunicorn
的设计
页面和关于 gevent
如何工作
的说明在它的介绍页面上找到。

2022-08-01