gunicorn优化以及开启异步的方法
- 2025-03-25 11:24:02
- 运维
- 64
- shevechco
Gunicorn的优化需要结合当前硬件资源以及WEB业务的场景来进行优化配置,例如CPU密集型和IO密集型两种场景他们对进程数和是否要开启异步的需求是不一样的,下面我就来介绍一下针对这些场景的优化方案。
1.CPU密集型场景
这种情况下,异步的作用就相对不大,我们需要提升进程数,因为Python的GIL锁的问题,所以我们主要针对进程(worker)数量进行配置,一般配置的标准是CPU核数*2+1,例如我当前2核就可以配置5,以下就是双核的初始配置推荐
gunicorn -w 5 -b 0.0.0.0:5000 manager:app -t 60 -D
2.IO密集型场景
这种需要结合worker异步模式,调整最大进程并发数,即--worker-connections的配置数量,一般可以先尝试worker数量设置CPU核心数+1,例如当前2核,这个可以优先设置为3,根据实际资源使用情况再进行增加,然后是--worker-connections默认是1000,一般情况这个配置就已经够用,以下就是双核的初始推荐配置
gunicorn -w 3 -k eventlet -b 0.0.0.0:9090 manager:app -t 60 -D
3.CPU密集型和IO密集型混合场景
这种情况下,也可以优先设置worker的数量为GPU核+1,然后可以适当的配置一些线程,线程数量可以优先设置CPU核*2,以下是双核的推荐初始配置
gunicorn -w 3 -k eventlet --threads 4 -b 0.0.0.0:9090 manager:app -t 60 -D
gunicorn还有很多其他配置,都可以根据自己的实际情况进行更改配置针对性优化,具体参数可以查看个笔记:https://sulao.cn/post/319
我目前使用的eventlet开启的异步,另外gevent库也是常用的异步之一,但是我的博客使用https,使用gevent有一些问题,所以改用eventlet,开启方法如下:
首先需要安装eventlet异步库
pip install eventlet
然后在入口文件进行库替换,在顶部添加以下两行代码,注意这个要加载所有from和import前面
from eventlet import monkey_patch, wsgi
monkey_patch()
如果不是使用gunicorn发布网站,那么还要将
app.run(host=app.config["HOST"], port=app.config["PORT"], debug=app.config["DEBUG"])
修改为
wsgi.server(eventlet.listen((app.config["HOST"], app.config["PORT"])), app)
内容版权声明:除非注明,否则皆为本站原创文章。