python操作uwsgi:
uWSGI是一个web server,并且独占uwsgi协议,但是同时支持WSGI协议,HTTP协议,主要的功能就是将HTTP协议转化成语言支持的网络协议供python使用;
那么,为什么我们要使用nginx和uwsgi实现线上项目的测试呢?
Nginx--uWSGI--Django--uWSGI--Nginx
- nginx中HttpUwsgiModule与uWSGI服务器进行交换;
- uWSGI调用django触发请求和相应,字典方式给django参数方法级别的调用,你不是数据传输;
- web服务器网关接口,实现了WSGI协议与http协议
- uwsgi启动不会像runserver那样自动重载,django只需要stop_start进行uwsgi开启和停止
- uwsgi启动后,django项目的程序已变成后台守护进程,不需要runserver,在关闭当前终端时此进程也不会停止;
项目使用生产环境时,考虑到并发的性能,可能就是会使用Nginx与uwgsi;
-
安装uwsgi
pip3 install uwsgi
-
uwsgi执行一般有两种方式:命令行和文件配置。但是命令行需要标记很多参数,采用文件配置更为方便;
文件格式支持很多种,比如ini,xml,yaml等等,以下用uwsgi.ini配置举例:+-
[uwsgi] socket = 0.0.0.0:18000 # http=127.0.0.1:8000 http = 0.0.0.0:8000 chdir = /home/ubuntu/zhaodabao/quick_app4.0 module = Quick_application.wsgi home = /home/ubuntu/.virtualenvs/quickappv4 master = true processes = 5 harakiri = 10 daemonize = /data/logs/quickappv4/uwsgi.log vacuum = True buffer-size = 32768
- Socket:双方可以主动的发送数据,客户端和服务端直接使用socket进行连接,可保持连接通道;
- http:客户端主动发起请求,服务器响应,服务器不能主动发起响应。一次性请求完毕后断开连接,节省资源;
- master:是否启动主进程来管理其他进程;
- chdir:项目的跟目录
- module: Django项目的wsgi文件的相对路径
- home:虚拟环境的目录
- worker:开启的进程数量
- reload-mercy:设置在平滑的重启(直到接收请求处理完重启)一个工作子进程中,等待这个工作结束的最长秒数;
- vacuum:服务结束后删除对应的socket和pid文件
- buffer-size:设置用于uwsgi包解析内存的缓存区大小
- pid_file:指定pid文件
- harakiri:请求超时时间
- limit_as:限制每个uwsgi进程占用的虚拟内存数目
- daemonize:进程后台执行,并保存日志到特定的路径
-
修改settings.py
DEBUG = false ALLOWED_HOST = ['网站域名']或者['服务监听IP地址']
-
启动uwsgi.ini和终止uwsgi
uwsgi --ini 项目文件夹/uwsgi.ini uwsgi --stop uwsgi.pid