Gunicorn 与 gevent 工作人员和线程

Posted

技术标签:

【中文标题】Gunicorn 与 gevent 工作人员和线程【英文标题】:Gunicorn with gevent workers and threads 【发布时间】:2016-04-22 09:27:32 【问题描述】:

我有一个 4 核的服务器。

在使用工作程序和线程设置 Gunicorn 时,我可以为 CPU 分配相同数量的工作程序和线程,因为它们会做不同的事情吗?

例如

from gevent import monkey
monkey.patch_all()
import multiprocessing

workers = multiprocessing.cpu_count() * 2 + 1
bind = "127.0.0.1:5000"
worker_class = 'gevent'
worker_connections = 1000
threads = multiprocessing.cpu_count() * 2 + 1

或者我应该这样做

from gevent import monkey
monkey.patch_all()
import multiprocessing

workers = 2 * 2 + 1
bind = "127.0.0.1:5000"
worker_class = 'gevent'
worker_connections = 1000
threads = 2 * 2 + 1

【问题讨论】:

【参考方案1】:

与 worker_class='gevent' 设置线程无关。请参阅文档中的引用,

从 Gunicorn 19 开始,可以使用线程选项来处理请求 多个线程。使用线程假定使用 gthread 工作线程。 Gunicorn Design

也来自线程设置文档,

此设置仅影响 Gthread 工作线程类型。 Gunicorn Settings

【讨论】:

以上是关于Gunicorn 与 gevent 工作人员和线程的主要内容,如果未能解决你的问题,请参考以下文章

gunicorn 实现 gevent 多线程

gunicorn+gevent 怎么觉得未实现 flask 的真正并行

gevent-socketio + Flask + Gunicorn

gunicorn syncworker

烧瓶 gevent 线程卡在 kafka 消费者上

gunicorn syncworker 源码解析