uwsgi使用介绍

1,简单介绍

WSGI(Web Server Gateway Interface),定义了web服务器(nginx、apache、iis等)和 web应用(或者将web框架,flask、django等)之间的接口规范。也就是说,只要 web服务器和 web应用都遵守WSGI协议,那么 web服务器和 web应用就可以随意的组合。

uwsgi.jpg

uwsgi的启动可以把参数加载命令行中,也可以是配置文件 .ini, .xml, .yaml 配置文件中,个人用的比较多得是 .ini 文件。
通过uwsgi --help可以查看得到:

-x|--xmlconfig                         load config from xml file
-x|--xml                               load config from xml file
--ini                                  load config from ini file
-y|--yaml                              load config from yaml file
-y|--yml                               load config from yaml file

2,安装部署

  • 一键安装
pip install uwsgitop
  • 源码安装
# 可以去pypi,搜索uwsgi下载:
https://pypi.python.org/pypi/uWSGI/ 
# 安装命令如下:
tar xvzf uwsgi-2.0.9.tar.gz
cd uwsgi-2.0.9
make
  • 目录规划
(.env) zhangshuaipeng@orange:~/web/flask/mysite$ tree .
.
├── hello.py
├── hello.pyc
├── uwsgi
│   ├── uwsgi.log                  # 日志文件,通过该文件查看uwsgi的日志
│   ├── uwsgi.pid                  # pid文件,通过该文件可以控制uwsgi的重启和停止
│   ├── uwsgi.sock                 # socket文件,配置nginx时候使用
│   └── uwsgi.status               # status文件,可以查看uwsgi的运行状态
└── uwsgi.ini
  • 配置使用
(.env) zhangshuaipeng@orange:~/web/flask/mysite$ vi uwsgi.ini 

[uwsgi]
chdir=/home/zhangshuaipeng/web/flask/mysite/
home=/home/zhangshuaipeng/web/flask/mysite/.env
module=hello                                 # python文件的名称
callable=app
master=true
processes=2                                  # worker进程个数
chmod-socket=666
logfile-chmod=644
uid=zhangshuaipeng_web
gid=zhangshuaipeng_web
procname-prefix-spaced=mysite                # uwsgi的进程名称前缀
py-autoreload=1                              # py文件修改,自动加载
#http=0.0.0.0:8080                           # 监听端口,测试时候使用

vacuum=true                                  # 退出uwsgi是否清理中间文件,包含pid、sock和status文件
socket=%(chdir)/uwsgi/uwsgi.sock             # socket文件,配置nginx时候使用
stats=%(chdir)/uwsgi/uwsgi.status            # status文件,可以查看uwsgi的运行状态
pidfile=%(chdir)/uwsgi/uwsgi.pid             # pid文件,通过该文件可以控制uwsgi的重启和停止
daemonize=%(chdir)/uwsgi/uwsgi.log           # 日志文件,通过该文件查看uwsgi的日志
  • 常用命令
uwsgi --ini uwsgi.ini             # 启动
uwsgi --reload uwsgi.pid          # 重启
uwsgi --stop uwsgi.pid            # 关闭

3,服务监控

  • 读取uwsgi实时状态
uwsgi --connect-and-read uwsgi/uwsgi.status

读取的结果是个json串,包括每个总的状态,每个work是状态,响应时间等,非常全面,也有一些开源的监控可以使用

  • 实时动态查看状态 - uwsgitop
    这里有个uwsgi官方制作的实用工具 uwsgitop, 下面看下效果。
# pip install uwsgitop
# uwsgitop uwsgi/uwsgi.status
uwsgi-2.0.9 - Mon Sep 14 11:20:44 2015 - req: 0 - RPS: 0 - lq: 0 - tx: 0
node: lzz-rmbp - cwd: /Users/liuzhizhi/erya/portal - uid: 501 - gid: 20 - masterpid: 12748
 WID    %       PID     REQ     RPS     EXC     SIG     STATUS  AVG     RSS     VSZ     TX      RunT
 1      0.0     12749   0       0       0       0       idle    0ms     0       0       0       0
 2      0.0     12750   0       0       0       0       idle    0ms     0       0       0       0
 3      0.0     12751   0       0       0       0       idle    0ms     0       0       0       0
 4      0.0     12752   0       0       0       0       idle    0ms     0       0       0       0
 5      0.0     12753   0       0       0       0       idle    0ms     0       0       0       0
 6      0.0     12754   0       0       0       0       idle    0ms     0       0       0       0
 7      0.0     12755   0       0       0       0       idle    0ms     0       0       0       0
 8      0.0     12756   0       0       0       0       idle    0ms     0       0       0       0
 

4,参考资料

推荐阅读更多精彩内容