Python Web编程之WSGI协议简介

本文实例讲述了Python Web编程之WSGI协议。分享给大家供大家参考,具体如下:

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:9000

亦或者指定Worker数量启动:

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

app为Flask实例的名称,Worker的数量推荐值是CPU的个数*2+1,CPU个数使用如下的方式获取:

python -c 'import multiprocessing; print multiprocessing.cpu_count()'

uWSGI

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

安装uWSGI

pip install uwsgi

使用uWSGI启动应用:

代码如下:

uwsgi --http 0.0.0.0:9000 --wsgi-file manager.py --callable app --processes 4 --threads 2 --stats 0.0.0.0:5000

上面的命令表示启动了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相关内容感兴趣的读者可查看本站专题:《Python Socket编程技巧总结》、《Python URL操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

(0)

相关推荐

  • 深入解析Python中的WSGI接口

    概述 WSGI接口包含两方面:server/gateway 及 application/framework. server调用由application提供的可调用对象. 另外在server和application之间还可能有一种称作middleware的中间件. 可调用对象是指:函数.方法.类或者带有callable方法的实例. 关于application 函数.方法.类及带有callable方法的实例等可调用对象都可以作为the application object. WSGI协议要求: th

  • 使用Nginx+uWsgi实现Python的Django框架站点动静分离

    由于: Django处理静态文件不太友好: 以后有可能需要处理php或者其他资源的请求: 所以考虑结合nginx,使用nignx做它擅长的路由分发功能:同时做动静分离,即Http请求统一由Nginx进行分发,静态文件由Nginx处理,并返回给客户端:而动态的请求,则分发到uWsgi,由uWsgi再分发给Django进行处理.即客户端 <-> nginx <-> socket <-> uwsgi <-> Django 一.环境 系统:centOS 6 pyth

  • python中WSGI是什么,Python应用WSGI详解

    为了让大家更好的对python中WSGI有更好的理解,我们先从最简单的认识WSGI着手,然后介绍一下WSGI几个经常使用到的接口,了解基本的用法和功能,最后,我们通过实例了解一下WSGI在实际项目中如何使用. WSGI是什么? wsgi是一个web组件的接口防范,wsgi将web组件分为三类:web服务器,web中间件,web应用程序 wsgi基本处理模式为:wsgi Server -> wsgi middleware -> wsgi application WSGI,全称 Web Serve

  • 详解python使用Nginx和uWSGI来运行Python应用

    uWSGI是一个Web应用服务器,它具有应用服务器,代理,进程管理及应用监控等功能.它支持WSGI协议,同时它也支持自有的uWSGI协议,该协议据说性能非常高,而且内存占用率低,为mod_wsgi的一半左右,我没有实测过.它还支持多应用的管理及应用的性能监控.虽然uWSGI本身就可以直接用来当Web服务器,但一般建议将其作为应用服务器配合Nginx一起使用,这样可以更好的发挥Nginx在Web端的强大功能.本文我们就来介绍如何搭建uWSGI+Ngnix环境来运行Python应用. 安装uWSGI

  • Python模块WSGI使用详解

    WSGI(Web Server Gateway Interface):Web服务网关接口,是Python中定义的服务器程序和应用程序之间的接口. Web程序开发中,一般分为服务器程序和应用程序.服务器程序负责对socket服务的数据进行封装和整理,而应用程序则负责对Web请求进行逻辑处理. Web应用本质上也是一个socket服务器,用户的浏览器就是一个socket客户端. 我们先用socket编程实现一个简单的Web服务器: import socket def handle_request(c

  • Python WSGI的深入理解

    前言 本文主要介绍的是Python WSGI相关内容,主要来自以下网址: What is WSGI? WSGI Tutorial An Introduction to the Python Web Server Gateway Interface (WSGI) 可以看成一次简单粗暴的翻译. 什么是WSGI WSGI的全称是Web Server Gateway Interface,这是一个规范,描述了web server如何与web application交互.web application如何处

  • 详解使用Nginx和uWSGI配置Python的web项目的方法

    基于python的web项目,常见的部署方法有: fcgi:用spawn-fcgi或者框架自带的工具对各个project分别生成监听进程,然后和http服务互动. wsgi:利用http服务的mod_wsgi模块来跑各个project. 不过还有个uwsgi,它既不用wsgi协议也不用fcgi协议,而是自创了一个uwsgi的协议,据作者说该协议大约是fcgi协议的10倍那么快.uWSGI的主要特点如下: 超快的性能. 低内存占用(实测为apache2的mod_wsgi的一半左右). 多app管理

  • python Web开发你要理解的WSGI & uwsgi详解

    WSGI协议 首先弄清下面几个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范.server和application的规范在PEP 3333中有具体描述.要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Djan

  • 详解Python程序与服务器连接的WSGI接口

    了解了HTTP协议和HTML文档,我们其实就明白了一个Web应用的本质就是: 浏览器发送一个HTTP请求: 服务器收到请求,生成一个HTML文档: 服务器把HTML文档作为HTTP响应的Body发送给浏览器: 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示. 所以,最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回.Apache.Nginx.Lighttpd等这些常见的静态服务器就是干这件事情的. 如果要动

  • Python Web编程之WSGI协议简介

    本文实例讲述了Python Web编程之WSGI协议.分享给大家供大家参考,具体如下: WSGI简介 Web框架和Wen服务器之间需要进行通信,如果在设计时它们之间无法相互匹配,那么对框架的选择就会限制对Web服务器的选择,这显然是不合理的.这时候需要设计一套双方都遵守的接口.WSGI是Python Web Server Gateway Interface的简称.WSGI标准在PEP 333中定义并被许多框架实现,它规定了一种在Web服务器之间具有可移植性.在后来的PEP 3333中添加了Pyt

  • Python网络编程之HTTP协议的python应用

    目录 搭建python自带静态web服务器 1. 静态Web服务器是什么? 2. 如何搭建Python自带的静态Web服务器 3. 访问搭建的静态Web服务器 4. 查看浏览器和搭建的静态Web服务器的通信过程 静态web服务器-返回固定页面数据 1. 开发自己的静态Web服务器 2. 静态Web服务器-返回固定页面数据的示例代码 静态web服务器-返回指定页面数据 1. 静态Web服务器的问题 2. 静态Web服务器-返回指定页面数据的示例代码 静态web服务器-多任务实现 1. 静态Web服

  • 详解Python GUI编程之PyQt5入门到实战

    1. PyQt5基础 1.1 GUI编程学什么 大致了解你所选择的GUI库 基本的程序的结构:使用这个GUI库来运行你的GUI程序 各种控件的特性和如何使用 控件的样式 资源的加载 控件的布局 事件和信号 动画特效 界面跳转 设计工具的使用 1.2 PyQT是什么 QT是跨平台C++库的集合,它实现高级API来访问现代桌面和移动系统的许多方面.这些服务包括定位和定位服务.多媒体.NFC和蓝牙连接.基于Chromium的web浏览器以及传统的UI开发.PyQt5是Qt v5的一组完整的Python

  • Python网络编程之HTTP客户端模块urllib与urllib3

    一.urllib 概述: urllib是Python中请求url连接的官方标准库,就是你安装了python,这个库就已经可以直接使用了,基本上涵盖了基础的网络请求功能.在Python2中主要为urllib和urllib2,在Python3中整合成了urllib. Python3.x中将urllib2合并到了urllib,之后此包分成了以下四个模块: urllib.request: 它是最基本的http请求模块,用来模拟发送请求 urllib.error: 异常处理模块,如果出现错误可以捕获这些异

  • Python网络编程之xmlrpc模块

    简介 rpc:远程过程调用协议.简单的来说就是客户端可以很方便得远程调用服务端的接口程序,而不用管底层是如何实现的. XML-RPC的全称是XML Remote Procedure Call,即XML(标准通用标记语言下的一个子集)远程过程调用.它是一套允许运行在不同操作系统.不同环境的程序实现基于Internet过程调用的规范和一系列的实现.这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式.Xml-Rpc的定义尽可能的保持了简单,但同时能够传送.处理.返回复杂的数据结构.

  • Python网络编程之TCP与UDP协议套接字用法示例

    本文实例讲述了Python网络编程之TCP与UDP协议套接字用法.分享给大家供大家参考,具体如下: TCP协议 服务器端: #!/usr/bin/env python from socket import * from time import ctime HOST = '' PORT = 21567 BUFSIZ = 1024 ADDR = (HOST, PORT) tcpSerSock = socket(AF_INET, SOCK_STREAM) ##创建服务器TCP套接字 tcpSerSoc

  • Python网络编程之socket与socketserver

    目录 一.基于TCP协议的socket套接字编程 1.套接字工作流程 1. 服务端套接字函数 2. 客户端套接字函数 3. 公共用途的套接字函数 4. 面向锁的套接字方法 5. 面向文件的套接字的函数 2.基于TCP协议的套接字编程 1. 服务端 2. 客户端 3.地址占用问题 1. 方法一:加入一条socket配置,重用ip和端口 2. 方法二:通过调整linux内核参数 4.模拟ssh远程执行命令 5.粘包 1.发送端需要等缓冲区满才发送出去,造成粘包 2.接收方不及时接收缓冲区的包,造成多

  • Java Web编程之Servlet技术详解

    Java Web编程之Servlet技术,知多少? 1.Servlet基础 针对Servlet技术开发,Sun公司提供了一些列接口和类,其中最重要的是javax.servlet.Servlet接口,两个重要的包是javax.servlet和javax.servlet.http,Servlet就是一种实现了Servlet接口的类,它由Web容器(Tomcat/Jetty等)负责调用并创建,用于接收和响应用户请求.Servlet接口中定义了5个抽象方法: Servlet顶层类结构如下所示: 2.第一

  • Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】

    本文实例讲述了Python 网络编程之TCP客户端/服务端功能.分享给大家供大家参考,具体如下: demo.py(TCP客户端): import socket def main(): # 1. 创建tcp的套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 2. 链接服务器 # tcp_socket.connect(("192.168.33.11", 7890)) server_ip = input(

  • Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】

    本文实例讲述了Python 网络编程之UDP发送接收数据功能.分享给大家供大家参考,具体如下: demo.py(UDP发送数据): import socket # 导入socket模块 def main(): # 创建一个udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定本机ip和端口号 (发送数据时,如果不绑定,系统会随机分配端口号.接收数据时,一般需要手动绑定ip和端口) udp_socket.b

随机推荐