Django项目操作uwsgi

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;

  1. 安装uwsgi

    pip3 install uwsgi
    
  2. 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
    
    
    1. Socket:双方可以主动的发送数据,客户端和服务端直接使用socket进行连接,可保持连接通道;
    2. http:客户端主动发起请求,服务器响应,服务器不能主动发起响应。一次性请求完毕后断开连接,节省资源;
    3. master:是否启动主进程来管理其他进程;
    4. chdir:项目的跟目录
    5. module: Django项目的wsgi文件的相对路径
    6. home:虚拟环境的目录
    7. worker:开启的进程数量
    8. reload-mercy:设置在平滑的重启(直到接收请求处理完重启)一个工作子进程中,等待这个工作结束的最长秒数;
    9. vacuum:服务结束后删除对应的socket和pid文件
    10. buffer-size:设置用于uwsgi包解析内存的缓存区大小
    11. pid_file:指定pid文件
    12. harakiri:请求超时时间
    13. limit_as:限制每个uwsgi进程占用的虚拟内存数目
    14. daemonize:进程后台执行,并保存日志到特定的路径
  3. 修改settings.py

    DEBUG = false
    ALLOWED_HOST = ['网站域名']或者['服务监听IP地址']
    
  4. 启动uwsgi.ini和终止uwsgi

    uwsgi --ini 项目文件夹/uwsgi.ini
    uwsgi --stop uwsgi.pid
    
原文地址:https://www.cnblogs.com/Zhao159461/p/13332237.html