WSGI简介

Web框架和Wen服务器之间需要进行通信,如果在设计时它们之间无法相互匹配,那么对框架的选择就会限制对Web服务器的选择,这显然是不合理的。这时候需要设计一套双方都遵守的接口。WSGI是Python Web Server Gateway Interface的简称。WSGI标准在PEP 333中定义并被许多框架实现,它规定了一种在Web服务器之间具有可移植性。在后来的PEP 3333中添加了Python 3的支持和更多相关的说明。有了通用的WSGI协议,Web开发者就能够任意选择适合自己的组合,而Web服务器和Web框架的开发者们也能够把精力集中到各自的领域

常见的WSGI容器

WSGI是一个同步接口,所以Tornado的WSGI容器是无法实现异步的。主流的选择是GunicornuWSGI

Gunicorn

Gunicorn易于配置,兼容性好,CPU消耗很少,在豆瓣使用广泛。它支持多种Worker模式,推荐的模式有如如下几种:

  • 同步Worker:默认模式,也就是一次只处理一个请求

  • 异步Worker:通过Eventlet、Gevent实现的异步模式

  • 异步IO Worker:目前支持gthread和gaiohttp两种类型

安装Gunicorn:

pip install gunicorn

Gunicorn的启动非常简单,语法如下:

gunicorn [OPTIONS] MODULE_NAME:VARIABLE_NAME

举个栗子,manager.py:

from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Hello World"
if __name__ == "__main__":
app.run()

启动应用:

gunicorn manager:app -b 0.0.0.0:

亦或者指定Worker数量启动:

gunicorn --workers= manager:app -b 0.0.0.0:

uWSGI

uWSGI是使用C编写的,显示了自有的uwsgi协议的Web服务器。它自带丰富的组件,其中核心组件包含进程管理、监控、IPC等功能,实现应用服务器接口的请求插件支持多种语言和平台,比如WSGI、Rack、Lua WSAPI,网管组件实现了负载均衡、代理和理由功能。

pip install uwsgi
uwsgi --http 0.0.0.0: --wsgi-file manager.py --callable app --processes --threads --stats 0.0.0.0:

上面的命令表示启动了4个进程,每个进程使用2个线程,而且开启了5000的Web接口,返回监控uWSGI的信息,一级不同进程和线程的详细使用情况。使用uWSGI有两点十分重要:

–http-socket–http其实是完全不同的两个选项。如果想直接裸跑uWSGI,应该使用–http,它产生一个额外的进程将请求转发给Workers,如果希望它被反向代理(比如和Nginx一起使用),应该使用–http-socket

合理的进程数和线程数不能简单的通过CPU * 2来计算得出,需要不断的尝试而找到最佳值。

uWSGI命令常用参数如下:

参数名 含义
–http 协议类型和端口号
–processes 开启的进程数量
–callable uWSGI加载的模块哪个变量将被调用
–workers 开启的进行数量,等同于processes
–chdir 指定运行目录
–wsgi-file 载入wsgi-file(加载wsgi.py文件)
–stats 在指定的地址上开启状态服务
–threads 开启的线程数量
–master 允许主进程存在
–daemonize 使进程在后台运行,并将日志输出到指定的日志文件或者UDP服务器
–pidfile 指定PID文件的位置,记录主进程的PID号
–vacuum 当服务器退出时自动清理环境,删除Unix Socket文件和PID文件

python项目部署的更多相关文章

  1. 案例 (一)如何把python项目部署到linux服务器上

      一.背景 用Python写了个脚本,需要部署到Linux环境的服务器上,由于服务器linux系统(centos,redhat等)自带的是python2,现在的python萌新都是从python3开 ...

  2. python 项目部署virtualenv

    安装virtualenv---------------------------------------- mac: pip3 install virtualenv ubuntu: apt instal ...

  3. 把python项目部署到centos里

    .安装centos VMware9下面安装centos .在centos下面设置共享文件夹为你本地的论坛的代码,然后设置网络为桥接:直接连接到物理网络,赋值网络连接状态 .进入forum_svr.py ...

  4. Python项目部署-使用Nginx部署Django项目

    一.nginx介绍及部署 二.nginx部署路飞学城代码 nginx配置安装 同样,nginx也有很多的安装方式: 1)源码安装(运维偏向:规范,便于配置管理) 2)yum,rpm安装(为了效率可以选 ...

  5. 使用Jenkins部署Python项目

    廖大使用Fabric部署的.我使用Jenkins试试部署过程.虽然说是用python项目部署测试的,但其他项目也是同理的. 参考Jenkins+Python部署完整版,不过安装方式不同. 安装tomc ...

  6. 云服务器部署Python项目(nginx+uwsgi+mysql+项目)

    python项目部署到云服务器 关注公众号"轻松学编程"了解更多. 一.硬件准备 云服务器,系统ubuntu_16_04 . 注意:要在安全组中开放Http的80端口. 二.软件准 ...

  7. 浅析Python项目服务器部署

    基础理论 关于Web服务器和应用服务器 基本概念: Web服务器主要功能就是存储.处理.传递网页,客户端和服务器之间基于HTTP协议进行通信. 应用服务器主要是处理动态请求,调用相应的对象完成对请求的 ...

  8. Jenkins部署Python项目实战

    一.背景 我们工作中常用Jenkins部署Java代码,因其灵活的插件特性,例如jdk,maven,ant等使得java项目编译后上线部署一气呵成,同样对于脚本语言类型如Python上线部署,利用Je ...

  9. Docker如何部署Python项目

    Docker 部署Python项目 作者:白宁超 2019年5月24日09:09:00 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如 ...

随机推荐

  1. 论一个PHP项目上线的注意点

    一.后端问题 服务器配置要跟上流量 预估QPS时要给足未知流量的空间 后端数据库设计要根据项目大小来相对应,小型流量单表就可以,但是中大型要分库分表 在处理执行修改的操作时一定要多一层判断(判断是否已 ...

  2. java中多态的要点

    多态有三要素 继承.方法重写.父类引用指向子类对象 多态可以理解成两个部分:一个是编译时,一个是运行时 编译时:定义规则:运行时:具体实现这个规则. 编译时:把父类强制转换成子类不会报错:运行时:先去 ...

  3. Vue篇1

    2019 Vue 面试题汇总(持续更新中...) 1. vue中的MVVM模式 即Model-View-ViewModel. Vue是以数据为驱动的,Vue自身将DOM和数据进行绑定,一旦创建绑定,D ...

  4. Myeclipse中dtd代码提示

    1.Myeclipse -->窗口 --> 首选项 2.输入xml c,然后添加 3.输入键 例如:http://struts.apache.org/dtds/struts-2.3.dtd ...

  5. xargs使用之空格处理

    xargs指定分隔符为'\n' (默认用空格分隔) locate xxx | xargs -d '\n' ls -l xargs使用 -0 参数会以字符串的'\0'结尾为分隔符,可以在文本传给xarg ...

  6. MySQL关闭查询缓存(QC)的两种方法

    MySQL Query Cache 会缓存select 查询,安装时默认是开启的,但是如果对表进行INSERT, UPDATE, DELETE, TRUNCATE, ALTER TABLE, DROP ...

  7. 【LeetCode】二分

    [475] Heaters [Easy] 给你一排房子,一排加热器.找到能warm所有房子的最小加热器半径. 思路就是对于每个房子,找离它最近的左右两台heater, 分别求距离.温暖这个房子的hea ...

  8. Python文件路径操作

    print(os.environ.get('HOME')) # 打印`HOME`这个环境变量 /Users/<> file_path = os.environ.get('HOME') + ...

  9. MySQL - primary key PK unique key,key PK index

    primary key PK unique key 总结 primary key = unique + not null 主键不能为空每个字段值都不重复,unique可以为空,非空字段不重复 uniq ...

  10. 攻防世界 MISC篇

    Excaliflag 一张图片,winhex打开没什么发现,分值不高,应该属于常见的图片隐写题目.如果对于图片的格式有详细的了解,应该很容易就能够知道了属于最低有效位(LSB)隐写,下面是通过phot ...