之前的文章使用 gunicorn 来部署 webpy 中简单的提到了 gunicorn 的使用。这篇文章就在官方文档的基础上学习下 gunicorn 的其他更多的用法。
基本的安装和参数就跳过了,这边讲下文档中很有用却不是常用的一些选项,如果要看基础使用可以去看之前的文章
配置文件
我们知道 gunicorn 能够直接使用命令行来启动,常见的参数
gunicorn -w 2 -b 0.0.0.0:5000 app:app --log-level info --access-logfile logfile.log --log-file error.log
当这样一路写下去就知道命令行非常难管理,所以 gunicorn 能够使用 config 文件来管理
gunicorn -c config.py app:app
这样就简单很多了。至于 config.py 文件格式如何,保证是一个 python 格式的文件,语法没有太大问题即可
import multiprocessing
bind = "127.0.0.1:8000"
workers = multiprocessing.cpu_count() * 2 + 1
backlog = 2048 # int 范围在 64-2048 pending 的链接最大数
worker_class = 'gevent'
debug = True
pidfile = '/tmp/home.pid'
loglevel = 'info'
logfile = '/var/log/gunicorn/gun_debug.log'
其他的全部配置可以在 setting 中找到。
设计模式
gunicorn 的设计,官方这篇说明清楚的解释了 同步 worker 和 异步 worker 的区别,如果你的应用程序接口有大量的 IO 操作推荐使用 异步 worker。
重新加载配置
首先要知道 master worker 的 pid 发送 -HUP
信号
kill -HUP masterpid
如何测试性能,可以使用 hey,下面的命令发送了 10000 个请求,其中 100 是并发量。
hey -n 10000 -c 100 http://127.0.0.1:5000/