一个高性能跨平台基于Python的Waitress WSGI Server的介绍!
对于Python来说,它有很多web框架,常见的有jango、Flask、Tornado 、sanic等,比如Odoo、Superset都基于Flask框架进行开发的开源平台,具有强大的功能。在Linux下,默认使用的WSGI Server一般为Gunicorn, 它是一个比较出名的 Web 服务器。在常规的 Django 和 Flask 应用部署中,都有大量的站点使用 Gunicorn。但它只支持Linux,不支持Windows,但有没有类似Gunicorn的产品,但同时支持跨平台?答案是肯定的,那就是Waitress。一个Web框架如何被客户端访问,如下图:
Web服务网关接口(Web Server Gateway Interface,简称“WSGI”)是一种在Web服务器 和Python Web应用程序或框架之间的标准接口。通过标准化Web服务器和Python web应用程序 或框架之间的行为和通信,WSGI使得编写可移植的的Python web代码变为可能,使其能够部署在任何符合WSGI的web服务器上。独立WSGI服务器相比传统web服务器,使用更少的资源,并提供最高的性能。
Waitress是一个具备生产级品质并有高性能的纯python编写独立的WSGI服务器,它只依赖python标准库,不依赖任何第三方库。同时它可以在多平台下运行,比如windows、linux、unix等,支持http/1.0和http/1.1。最新版本是2.0.0,Python >=3.6.0,官网文档地址:https://docs.pylonsproject.org/projects/waitress/en/latest/,源代码托管网址:https://github.com/Pylons/waitress。
安装Waitress只需一个命令行:pip install waitress
运行Waitress有两种方式,一种是代码方式,优点灵活性会更好,可以扩展一些增强功能,比如与其他库的交互,日志记录等,另一种方式waitress-serve命令行方式。本文重点介绍一下waitress-serve命令行方式,该命令行有很多参数,官方文档:https://docs.pylonsproject.org/projects/waitress/en/stable/runner.html,具体如下:
waitress-serve [OPTS] MODULE:OBJECT
常用选项:
--help
显示此信息。
--call
调用给定的对象以获取WSGI应用程序。
--host=ADDR
要侦听的主机名或IP地址,默认值为“ 0.0.0.0”,表示“此主机上的所有IP地址”。
--port=PORT
要侦听的TCP端口,默认为“ 8080”
--listen=host:port
告诉waitress 监听的IP端口。
例子:
--listen = 127.0.0.1:8080 --listen = [:: 1]:8080 --listen = *:8080
可以多次使用此选项以侦听multipe套接字。还支持主机名的通配符,该通配符将绑定到IPv4 / IPv6,具体取决于它们是启用还是禁用。
--[no-]ipv4
启用/禁用IPv4支持。
在侦听通配符地址/端口组合时,这会影响通配符匹配。
--[no-]ipv6
启用/禁用IPv6支持。
在侦听通配符地址/端口组合时,这会影响通配符匹配。
--unix-socket=PATH
Unix套接字的路径。如果指定了套接字路径,则会创建一个Unix域套接字,而不是通常的inet域套接字。
在Windows上不可用。
--unix-socket-perms=PERMS
用于Unix域套接字的八进制权限,默认值为'600'。
--url-scheme=STR
默认wsgi.url_scheme值,默认为“ http”。
--url-prefix=STR
该SCRIPT_NAMEWSGI环境价值。将其设置为除空字符串之外的任何SCRIPT_NAME值,将使WSGI值成为传递的值减去您添加的任何斜杠,并且将导致 PATH_INFO带有该值前缀的所有请求的前缀均被删除。默认为空字符串。
--ident=STR
响应中“服务器”标头中使用的服务器身份。默认值为“waitress”。
调整选项:
--threads=INT
用于处理应用程序逻辑的线程数,默认为4。
--backlog=INT
服务器的连接积压。默认值为1024。
--recv-bytes=INT
调用时要请求的字节数socket.recv()。默认值为8192。
--send-bytes=INT
要发送到socket.send()的字节数。默认值为1。9000的倍数应避免部分填充TCP数据包。
从1.3版开始不推荐使用。
--outbuf-overflow=INT
如果挂起的输出大于此大小,则应创建一个临时文件。默认值为1048576(1MB)。
--outbuf-high-watermark=INT
当挂起的输出大于此值时,app_iter将暂停,并在将足够的数据写入套接字以使其降至此阈值以下时将恢复。默认值为16777216(16MB)。
--inbuf-overflow=INT
如果挂起的输入大于此值,则应创建一个临时文件。默认值为524288(512KB)。
--connection-limit=INT
如果已经激活了太多频道,请停止创建新频道。默认值为100。
--cleanup-interval=INT
清理无效通道之间的最短间隔时间。默认值为30。请参见 --channel-timeout。
--channel-timeout=INT
保持不活动连接打开的最大秒数。默认值为120。“不活动”定义为“未从客户端收到任何数据,也未向客户端发送任何数据”。
--[no-]log-socket-errors
切换是否应记录客户端过早断开连接的回溯。默认情况下为开。
--max-request-header-size=INT
合并所有请求标头的最大大小。默认值为262144(256KB)。
--max-request-body-size=INT
请求正文的最大大小。默认值为1073741824(1GB)。
--[no-]expose-tracebacks
切换是否向客户端公开未处理异常的回溯。默认情况下关闭。
--asyncore-loop-timeout=INT
以秒为单位的超时值传递到asyncore.loop()。默认值为1。
--asyncore-use-poll
use_poll参数传递给asyncore.loop()。帮助克服打开文件描述符的限制。默认值为False。
更多技术沟通交流,可关注我的微信号:odoodev

长按图片扫描二维码
也可以关注我的今日头条号:

长按图片扫描二维码
一个高性能跨平台基于Python的Waitress WSGI Server的介绍!的更多相关文章
- AutoPy首页、文档和下载 - 跨平台的Python GUI工具包 - 开源中国社区
AutoPy首页.文档和下载 - 跨平台的Python GUI工具包 - 开源中国社区 AutoPy是一个简单跨平台的 Python GUI工具包,可以控制鼠标,键盘,匹配颜色和屏幕上的位图.使用纯A ...
- 基于Python的Webservice开发(二)-如何用Spyne开发Webservice
一.功能需求 本次案例是开发一个Item的新建的WebService.IN&OUT的类型JsonDocument. 通过传入相关的参数创建Item,且相关的参数可以被缺省. 二.实现代码 引入 ...
- 基于Python的Webservice开发(四)-泛微OA的SOAP接口
一.功能需求 泛微e-cology可以在流程中调用Webservice接口实现与其他系统的联动等复杂功能.但是目前泛微文档中仅提供了调用的方法,但是没有关于接口的相关开发信息. 本次案例是用Pytho ...
- psutil一个基于python的跨平台系统信息跟踪模块
受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ...
- 【Python】如何基于Python写一个TCP反向连接后门
首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...
- 初识TPOT:一个基于Python的自动化机器学习开发工具
1. TPOT介绍 一般来讲,创建一个机器学习模型需要经历以下几步: 数据预处理 特征工程 模型选择 超参数调整 模型保存 本文介绍一个基于遗传算法的快速模型选择及调参的方法,TPOT:一种基于Pyt ...
- ShutIt:一个基于 Python 的 shell 自动化框架
ShutIt是一个易于使用的基于shell的自动化框架.它对基于python的expect库(pexpect)进行了包装.你可以把它看作是“没有痛点的expect”.它可以通过pip进行安装. Hel ...
- 利用基于Python的Pelican打造一个自己的个人纯静态网站
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_100 其实呢这么多年以来我一直建议每个有技术追求的开发者都要有写技术博客记笔记的良好习惯,一来可以积累知识,二来可以帮助别人,三来 ...
- 基于Python的Webservice开发(一)-简介
之前为了解决Webservice的开发,直接用Python自带的CGI模块挂在IIS上. 但是该方式开发Soap的接口,需要大量的开发,而且安全方面也存在很多问题. 我推荐关于用Python开发Web ...
随机推荐
- IO中同步异步,阻塞与非阻塞 -- 原理篇
再补一篇高手写的理论分析,便于更深刻理解 转自:http://blog.csdn.net/historyasamirror/article/details/5778378 ============== ...
- 摘要任务工期计算(Project)
<Project2016 企业项目管理实践>张会斌 董方好 编著 先说一个好消息:摘要工期是可以自动计算的. 比如A1.A2.A3.A4四个任务,工期如下图安排: 而他们的摘要任务,就不再 ...
- win10 linux ubuntu子系统 使用adb
条件 本文已经默认你已经在win10系统下成功配置了ubuntu子系统,所以唯一的条件就是windows上的adb 版本和ubuntu子系统的adb版本一致. 方法 怎么来保证adb 版本一致呢?在本 ...
- 阿里云ilogtail收集自建Kubernetes容器日志文件
背景 1,k8s属于自建. 2,需要收集应用服务容器里面指定目录的日志. 3,计划收集所有私有云php和nginx日志. 4,日志格式化处理. 思考 1,一个私有云一个Project,还是统一放入一个 ...
- java 理论基础 类的初始化(加载、连接(验证、准备、解析)、初始化)
一个进程就有一个JVM,每个进程之间资源独立 当调用java命令来启动某个Java程序的时候,该命令创建一个独立的进程来运行我们的Java程序.而这个独立的进程里面就包含一个Java虚拟机.不管该程序 ...
- 分布式系统一致性算法(Raft)
过去, Paxos一直是分布式协议的标准,但是Paxos难于理解,更难以实现,Google的分布式锁系统Chubby作为Paxos实现曾经遭遇到很多坑. 来自Stanford的新的分布式协议研究称为R ...
- restTemplate 接收list数据
User[] users= restTemplate.getForObject(url, User[].class); 使用数组接收
- JAVA通过实体类生成数据库查询语句(驼峰命名规则)
import java.io.IOException; import java.lang.reflect.Field; import java.util.HashMap; import java.ut ...
- 【LeetCode】1413. 逐步求和得到正数的最小值 Minimum Value to Get Positive Step by Step Sum
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 求和 日期 题目地址:https://leetcode ...
- 【LeetCode】281. Zigzag Iterator 解题报告 (C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 deque 日期 题目地址:https://leetc ...