uwsgi 使用随笔

uwsgi, wsgi协议的一个很好的实现,源码在这里:https://github.com/unbit/uwsgi

c语言编写,有兴趣可以研究下。

DEMO

wsgi_server.py

def application(env, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])
    return ‘hello world‘

应用:

使用uwsgi部署以上应用:

uwsgi --http 0.0.0.0:9090 -p 4 -l 100 -M -R 100000  -z30 -L --wsgi-file  wsgi_server.py --max-apps 65535 --stats 127.0.0.1:1717 --post-buffering 100M --cpu-affinity --buffer-size 65535 --daemonize /tmp/uwsgi --pidfile /tmp/uwsgi.pid  --memory-report --threads 4

然后浏览器访问: http://localhost:9090/ 即可。

优势:

提高并发访问支持(-p 进程数, --threads  线程数)

提高服务运行稳定性(--daemonize)

安装

pip install uwsgi
pip install uwsgitop

uwsgi--uwsgi服务器

uwsgitop--uwsgi服务器性能查看工具,用法:

配合以上例子

uwsgitop 127.0.0.1:1717

参数详细说明

官方文档:http://uwsgi-docs.readthedocs.io/en/latest/Options.html

挑几个重点:

--wsgi-file , 指定wsgi入口文件

-p  , workers个数,也是进程数, 按照惯例可默认设为核数,但是不是最有需要通过 uwsgitop来查看(个人觉得uwsgitop没啥用)。

--threads , 线程数, 每个进程的线程数,进程的任务用线程的模式完成。由于用c编写,因此不用担心GIL的问题, 但linux上不存在线程,线程本质来讲是伪进程(且存在上下文切换成本),因此不建议使用。

(用了后,再用uwsgitop监控时,可通过键盘的“A”键查看线程的资源占用情况)

--listen , 内核监听(listen)网络队列的长度,受文件操作系统最大的网络连接数(net.core.somaxconn) 的限制, 长度越大意味着在高并发的环境下,丢失请求越少。

--cpu-affinity, cpu友好,即进程在运行时不切换核(切换以为者时间成本)

--stats,  监控程序的url,只有设置了这个参数以后才能用 uwsgitop 1717来观看监控

--memory-report, 开启内存占用报告(uwsgitop中可以看到)

--master, 启动主进程,方便管理所有进程, 可以配合 pidfie 使用。方便停止(uwsgi --stop /tmp/uwsgi.pid)/重启uwsgi ( uwsgi --reload /tmp/uwsgi.pid)

--daemonize, 增加守护进程,使web服务更加稳定。参数为日志文件的路径。

其他略,可以自己逐一尝试。

用途

flask必需搭配使用咯。

django建议使用,默认支持,有默认的wsgi.py文件生成。

时间: 2024-11-13 15:55:46

uwsgi 使用随笔的相关文章

uWSGI其一:概念篇

对 Nginx,WSGI(或者 uWSGI,uwsgi),Django(或者Flash或Tornado),这几者的关系一存存在疑惑.通过查阅了些资料,总算把它们的关系理清了. 总括来说,客户端从发送一个 HTTP 请求到Django处理请求,分别经过了 web服务器层,WSGI层,web框架层,这三个层次.不同的层次其作用也不同,下面简要介绍各层的作用. 图1:web服务器,web框架与 WSGI 的三层关系 Web服务器层 对于传统的客户端 – 服务器架构,其请求的处理过程是,客户端向服务器发

跨过Nginx上基于uWSGI部署Django项目的坑

先说说他们的关系,Nginx和uWSGI都是Web服务器,Nginx负责静态内容,uWSGI负责Python这样的动态内容,二者配合共同提供Web服务以实现提高效率和负载均衡等目的.uWSGI实现了多个协议,如WSGI,HTTP协议,还有它自己的uwsgi协议,想了解更多关于uWSGI和uwsgi协议内容可以查阅这里.这样和fastcgi类似,请求和响应的流程如下: Request > Nginx > uWSGI > Django > uWSGI > Nginx > R

Ubuntu Nginx uwsgi django 初试

/************************************************************************************** * Ubuntu Nginx uwsgi django 初试 * 说明: * 最近打算通过Python搭建一个数据收集的网站,先做一个搭建测试. * * 2016-8-5 深圳 南山平山村 曾剑锋 ***************************************************************

随笔,CentOS 下 Python Web 环境的安装

1.下载Python 3.5.1源码2.运行,yum -y install zlib zlib-devel openssl-devel3.解压,运行 ./configure --prefix=/usr/local/python-3.5.14.make && make install5.运行python -V,记住系统自带的python版本号6.ln -fs /usr/local/python-3.5.1/bin/python3.5 /usr/bin/python7.ln -fs /usr/

C#博客随笔之六:数据绑定

这一篇随笔记录的是在完成程序中遇到的一些情况 首先要讲的是MVVM 所谓MVVM就是Model,View,ViewModel 下面是MVVM的优点(引用自百度百科): MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点1. 低耦合.视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变.2. 可重用性.你可以把一些视图

Abby's 学习php5随笔

2017.6.27 Abby's cakephp2 学习之旅 下载了XAMPP集成开发环境,然后配置其数据库,参考学习教程, 1.建立表单. 配置完信息如下,Cache Apache默认在windows下是system用户,所以权限最高,但xampp集成环境中的apache确是administor 如何更改apache用户为system 静默开发.(一种开发方法,番茄ToDo中的学霸模式有些相似) 如何设置.ctp的显示 http://cakephp2.local/posts/index怎么就可

java基础随笔 字符数据类型char的单引号

public class Love{ public static void main(String[] args){ System.out.println('*'+'\t'+'*'); System.out.println("*"+"\t"+"*") } } 运行结果   第一行为  93 第二行为  *        * 原因 第一行中'\t' 单引号  识别为字符数据类型char,char类型是可以运算的,在第一行中+做了运算符. 第二行&q

django+nginx+uwsgi部署web站点

环境: django:1.8.16 python:2.7.13 pip:2.7 uwsgi:2.0.15 project路径: /opt/cmdb/ Uwsgi的安装配置 1.安装python2.7 (省略安装过程) 2.安装pip2.7 (省略安装过程) 3.安装uwsgi(注意:要用pip2.7安装) pip2.7 install uwsgi 4.配置uwsgi.ini 路径: /opt/cmdb/uwsgi.ini 文件内容: [[email protected] cmdb]# cat u

Nginx+uwsgi+web.py配置

遇坑的同鞋可以留意一下 操作系统:Centos7 准备文件:Python-2.7.13.tgz下载地址:https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgznginx-1.12.0.tar.gz下载地址:http://nginx.org/download/nginx-1.12.0.tar.gzuwsgi-2.0.15.tar.gz下载地址:https://projects.unbit.it/downloads/uwsgi-2.0.1