【python】gunicorn配置

起因:因为cpu利用率低导致我去缩容,虽然缩容之后cpu利用率上升维持在60%左右,但是程序响应耗时增加了。
解释:因为cpu干这件活本身不累,但在干这件活的时候不能去干其他事情,导致并发的请求不能及时响应,导致耗时增加。
比如,sleep1s,此时cpu利用率为0,但是cpu却做不了其他的处理。其他任务就被阻塞。
解法:增加cpu的线程数。
https://blog.csdn.net/weixin_38553042/article/details/120066188

但我任务的配置其实是协程,而不是多线程。

gunicorn当worker_class = 'gevent’时,如何增加程序的并发能力?

在 Gunicorn 中使用 worker_class = 'gevent'(基于协程的异步 Worker)时,提升并发能力的关键在于 合理配置协程并发数 和 优化资源分配。以下是具体方法和步骤:


一、gevent 的并发原理

gevent 通过 协程(Coroutine) 和 事件循环(Event Loop) 实现高并发,每个请求由协程处理而非线程或进程。协程的切换成本极低,因此适用于 I/O 密集型 场景(如 HTTP API、数据库查询、外部服务调用等)。


二、提升并发能力的核心参数

1. Worker 进程数 (--workers/workers)
  • 作用:指定启动的 Worker 进程数量。每个 Worker 是一个独立进程,内部通过协程处理并发。
  • 建议值:通常设置为 CPU 核心数 × 2 + 1。例如 4 核 CPU 可设 workers = 9
  • 示例

    gunicorn --workers=9 --worker-class=gevent app:app

2. 每个 Worker 的并发连接数 (--worker-connections/worker_connections)
  • 作用:单个 Worker 进程能处理的最大并发连接数。此参数直接影响协程池大小。
  • 建议值:默认 1000,可调整为 1000~5000(需根据内存和负载测试调整)。
  • 示例
    gunicorn --workers=9 --worker-class=gevent --worker-connections=2000 app:app
    
3. 超时时间 (--timeout/timeout)
  • 作用:防止单个请求长时间阻塞协程。
  • 建议值:根据接口响应时间设定(如 --timeout=30 表示 30 秒超时)。

三、完整配置示例

1. 通过命令行启动
gunicorn \
  --workers=9 \                # Worker 进程数 = CPU核心数 × 2 + 1
  --worker-class=gevent \      # 使用 gevent Worker
  --worker-connections=2000 \  # 每个 Worker 的协程并发数
  --timeout=30 \               # 请求超时时间
  --bind=0.0.0.0:8000 \        # 绑定端口
  app:app                      # 应用入口
2. 通过配置文件 (gunicorn.conf.py)
# gunicorn.conf.py
workers = 9
worker_class = "gevent"
worker_connections = 2000
timeout = 30
bind = "0.0.0.0:8000"

启动命令:

gunicorn -c gunicorn.conf.py app:app

四、关键优化点

1. 内存限制
  • 每个 Worker 的协程数 (worker_connections) 受内存限制。协程越多,内存占用越高。
  • 监控内存:使用 top 或 htop 观察进程内存,避免触发 OOM(内存不足)。
2. I/O 密集型 vs CPU 密集型
  • I/O 密集型(如 HTTP API、数据库查询):优先增加 worker_connections
  • CPU 密集型(如图像处理、复杂计算):协程无法提升性能,需改用多进程(如 gthread Worker)。
3. 数据库连接池
  • 协程并发高时,需确保数据库连接池足够大(如 SQLAlchemy 的 pool_size)。
4. 依赖库兼容性
  • 确保所有代码和第三方库兼容 gevent(可能需要 monkey.patch_all())。
  • 启动前添加补丁
    # app.py 入口文件顶部
    from gevent import monkey
    monkey.patch_all()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/982332.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SSE vs WebSocket:AI 驱动的实时通信抉择

引言 近年来,基于 Transformer 的大模型推动了 AI 产业的飞速发展,同时带来了新的技术挑战: 流式传输 vs 批量返回:大模型生成的长文本若需一次性返回,会显著影响用户体验,实时推送成为必需。语音交互需求:语音助手要求毫秒级响应,而非等待用户完整输入后再返回结果。…

基于海思soc的智能产品开发(芯片sdk和linux开发关系)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 随着国产化芯片的推进,在soc领域,越来越多的项目使用国产soc芯片。这些soc芯片,通常来说运行的os不是linux&…

各种DCC软件使用Datasmith导入UE教程

3Dmax: 先安装插件 https://www.unrealengine.com/zh-CN/datasmith/plugins 左上角导出即可 虚幻中勾选3个插件,重启引擎 左上角选择文件导入即可 Blender导入Datasmith进UE 需要两个插件, 文章最下方链接进去下载安装即可 一样的,直接导出,然后UE导入即可 C4D 直接保存成…

VMware Fusion虚拟机Mac版安装Ubuntu系统

介绍 Ubuntu操作系统是一个基于Linux内核的桌面和服务器操作系统。它由Canonical公司开发和维护,是最受欢迎的Linux操作系统之一。Ubuntu操作系统以简洁、直观和易用为设计原则,提供了友好的图形界面,支持多种语言和自定义设置,用…

发行思考:全球热销榜的频繁变动

几点杂感: 1、单机游戏销量与在线人数的衰退是剧烈的,有明显的周期性,而在线游戏则稳定很多。 如去年的某明星游戏,最高200多万在线,如今在线人数是48名,3万多。 而近期热门的是MH,在线人数8…

AI赋能科研绘图与数据可视化高级应用

在科研成果竞争日益激烈的当下,「一图胜千言」已成为高水平SCI期刊的硬性门槛——数据显示很多情况的拒稿与图表质量直接相关。科研人员普遍面临的工具效率低、设计规范缺失、多维数据呈现难等痛点,因此科研绘图已成为成果撰写中的至关重要的一个环节&am…

thingsboard edge 在windows 环境下的配置

按照官方文档:Installing ThingsBoard Edge on Windows | ThingsBoard Edge,配置好java环境和PostgreSQL。 下载对应的windows 环境下的tb-edge安装包。下载附件 接下来操作具体如下 步骤1,需要先在thingsboard 服务上开启edge 权限 步骤2…

最硬核DNS详解

1、是什么 DNS(域名系统)是互联网的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS协议基于UDP协议,使用端口号53。 2、域名服务器类型 域名服务器在DNS体系中扮演着不…

CentOS 7 安装Nginx-1.26.3

无论安装啥工具、首先认准了就是官网。Nginx Nginx官网下载安装包 Windows下载: http://nginx.org/download/nginx-1.26.3.zipLinxu下载 wget http://nginx.org/download/nginx-1.26.3.tar.gzLinux安装Nginx-1.26.3 安装之前先安装Nginx依赖包、自行选择 yum -y i…

基于国产芯片的AI引擎技术,打造更安全的算力生态 | 京东零售技术实践

近年来,随着国产AI芯片的日益崛起,基于国产AI芯片的模型适配、性能优化以及应用落地是国产AI应用的一道重要关卡。如何在复杂的京东零售业务场景下更好地使用国产AI芯片,并保障算力安全,是目前亟需解决的问题。对此,京…

osg官方例子

osg3.6.5官方例子 osganimate osganimationeasemotion osganimationmakepath osganimationmorph

分享react后台管理系统常见的组件/知识点

前言 虽然各个前端框架的常用组件库已经非常完善,但做具体业务时,一般情况下,我们无法直接套用组件,需要自己进行撰写对应业务逻辑。 这篇文章总结做react表单列表常见的组件/知识点。 注意:本篇仅提供相关功能的核心…

自动驾驶---不依赖地图的大模型轨迹预测

1 前言 早期传统自动驾驶方案通常依赖高精地图(HD Map)提供道路结构、车道线、交通规则等信息,可参考博客《自动驾驶---方案从有图迈进无图》,本质上还是存在问题: 数据依赖性高:地图构建成本昂贵&#xf…

如何在您的 QQ机器人 中集成 码本 AI 模型!

如何在您的QQ机器人中集成 码本 AI 模型! 开源技术栏 通过使用此工具,您可以轻松地将 码本 API 服务 集成到您的 QQ 机器人 中,实现快速部署和运行。 这个工具专为简化复杂流程设计,即便是初学者也能轻松上手,让您的…

Java与数据库

目录 一.本文焦点: 二.数据库常用数据类型 三.对数据库操作 四.对数据库中的表操作 五.条件表达 六. 表查询操作进阶 1.多表连接查询 1)交叉连接查询 2)内连接(取两表交集) 3)外连接 4&#xff09…

基于ANTLR4的大数据SQL编辑器解析引擎实践|得物技术

一、背景 随着得物离线业务的快速增长,为了脱离全托管服务的一些限制和享受技术发展带来的成本优化,公司提出了大数据Galaxy开源演进项目,将离线业务从全托管且封闭的环境迁移到一个开源且自主可控的生态系统中,而离线开发治理套…

HTML第四节

一.复合选择器 1.后代选择器 注:1.后代选择器会选中后代所有的要选择的标签 2.儿子选择器 3.并集选择器 注:1.注意换行,同时选中多种标签 4.交集选择器 注:1.标签选择器放在最前面,例如放在类选择器的前面 2.两个选择…

数字后端培训实战项目六大典型后端实现案例

Q1:请教一个问题,cts.sdc和func.sdc在innovus用如何切换?在flow哪一步切换输入cts.sdc?哪一步切换到func.sdc,具体如何操作? 这个学员其实就是在问使用分段长clock tree时具体的flow流程是怎么样的?针对时…

linux 使用阿里云盘 阿里网盘

可参考&#xff1a;https://blog.csdn.net/qq_41174671/article/details/127310715 一、对文件<100M的可以使用如下方法&#xff1a; 1.临时使用阿里网盘 wget https://github.com/tickstep/aliyunpan/releases/download/v0.2.7/aliyunpan-v0.2.7-linux-amd64.zip unzip …

性能测试--大厂面试问题解析

性能测试作为软件开发中的关键环节&#xff0c;确保系统在高负载下仍能高效运行。面试中&#xff0c;相关问题常被问及&#xff0c;包括定义、类型、工具选择、规划与执行方法、常见瓶颈、敏捷环境下的处理、监控作用、虚拟用户数量确定、功能测试的区别、JMeter工作原理、HTTP…