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)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/1005

相关推荐