Gunicorn是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有部署使用非常简单,轻量级的资源消耗,以及高性能等特点。
1.Debian/Ubuntu可通过apt安装
apt-get install gunicorn
2.Centos可通过yum安装
yum install gunicorn
3.pip安装
pip install gunicorn
以下面的示例文件为例,简述使用方法。
# filename:test.py
def app(environ, start_response):
"""Simplest possible application object"""
data = 'Hello, World!\n'
status = '200 OK'
response_headers = [
('Content-type','text/plain'),
('Content-Length', str(len(data)))
]
start_response(status, response_headers)
return iter([data])
可以直接用命令运行,
gunicorn --workers=2 test:app
常见[OPTIONS]参数,
-c CONFIG, --config=CONFIG: 指定配置文件(配置文件必须是py文件)
-b BIND, --bind=BIND: 与指定socket进行绑定
-D, --daemon: 以守护进程形式来运行Gunicorn进程,其实就是将这个服务放到后台去运行。
如果希望supervisor来监控,daemon必须为false
-w WORKERS, --workers=WORKERS: 工作进程的数量。上边提到gunicorn是一个pre-fork worker模式,就是指gunicorn启动的时候,在主进程中会预先fork出指定数量的worker进程在处理请求时,gunicorn依靠操作系统来提供负载均衡,通常推荐的worker数量是:(2 x $num_cores) + 1。
起多少个进程需要根据服务器的内存来定,如果太多了内存扛不住可能起不来。
-k WORKERCLASS, --worker-class=WORKERCLASS: 工作进程类型. 包括 sync(默认), eventlet, gevent, or tornado, gthread, gaiohttp
–backlog INT: 最大挂起的连接数
–chdir: 切换到指定的工作目录
–log-level LEVEL: 输出error log的颗粒度,有效的LEVEL有:debug、info、warning、error、critical
–access-logfile FILE: 确认要写入Access log的文件FILE. ‘-’ 表示输出到标准输出
–error-logfile FILE, --log-file FILE: 确认要写入Error log的文件FILE. ‘-’ 表示输出到标准错误输出
下面是一个参考的配置文件
# filename:gunicorn.conf.py
# 绑定ip和端口号
bind = '0.0.0.0:8080'
# 设置守护进程,将进程交给supervisor管理
daemon = 'false'
# 监听队列
backlog = 512
# 超时
timeout = 30
# 使用gevent模式,还可以使用sync 模式,默认的是sync模式
worker_class = 'gevent'
# 进程数
# workers = multiprocessing.cpu_count() * 2 + 1
workers = 4
# 指定每个进程开启的线程数
threads = 2
# 设置最大并发量
worker_connections = 2000
# 设置访问日志路径
accesslog = "/home/rd/logs/access.log"
# 设置错误日志路径
errorlog = "/home/rd/logs/debug.log"
# 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置
loglevel = 'info'
相应的运行命令,
gunicorn -c gunicorn.conf.py test:app
如果你的gunicorn不是系统默认的,运行时你需要指定gunicorn的路径,否则会出现找不到相应命令的错误。如果是用pip安装的,你需要先激活安装了gunicorn的环境。
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
1.Debian/Ubuntu可通过apt安装
apt-get install supervisor
2.Centos可通过yum安装
yum install supervisor
3.pip安装
pip install supervisor
4.easy_install安装
easy_install supervisor
生成 supervisor 默认配置文件,首先生产一个supervisor目录,默认放在/etc/目录下,当然你可以根据需要放在其他目录下面。
echo_supervisord_conf > /etc/supervisor/supervisor.conf
这里我们放在/etc/supervisor/目录下,文件名为supervisor.conf,可以取其他名字。
如果你的项目的配置文件想根据项目需求单独写,你需要修改一些配置,将你的配置文件的路径加到include下,
sudo vim /etc/supervisor/supervisor.conf
在文件最后一行添加你的配置文件的路径
[include]
files =/xxx/test.conf
配置文件中注释是用冒号注释
下面我们开始写配置文件,
[program:test]
;项目工作目录(脚本启动目录的全路径)
directory = /home/rd/xxx
;启动命令
command = gunicorn -c gunicorn.conf.py app:app
;启动时间
startsecs = 0
;终止等待时间
stopwaitsecs = 0
;supervisord守护程序启动时自动启动tornado
autostart = true
;supervisord守护程序重启时自动重启tornado
autorestart = true
;log 日志
stderr_logfile=/home/rd/logs/error.log
启动命令,
supervisord -c /etc/supervisor/supervisor.conf
supervisorctl一些常见的命令,
supervisorctl status # 查看程序状态
supervisorctl stop update_ip # 关闭 update_ip 程序
supervisorctl start update_ip # 启动 update_ip 程序
supervisorctl restart update_ip # 重启 update_ip 程序
supervisorctl reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl update # 重启配置文件修改过的程序