对于Python来说,它有很多web框架,常见的有jango、Flask、Tornado 、sanic等,比如Odoo、Superset都基于Flask框架进行开发的开源平台,具有强大的功能。在Linux下,默认使用的WSGI Server一般为Gunicorn, 它是一个比较出名的 Web 服务器。在常规的 Django 和 Flask 应用部署中,都有大量的站点使用 Gunicorn。但它只支持Linux,不支持Windows,但有没有类似Gunicorn的产品,但同时支持跨平台?答案是肯定的,那就是Waitress。一个Web框架如何被客户端访问,如下图:

              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的介绍!的更多相关文章

  1. AutoPy首页、文档和下载 - 跨平台的Python GUI工具包 - 开源中国社区

    AutoPy首页.文档和下载 - 跨平台的Python GUI工具包 - 开源中国社区 AutoPy是一个简单跨平台的 Python GUI工具包,可以控制鼠标,键盘,匹配颜色和屏幕上的位图.使用纯A ...

  2. 基于Python的Webservice开发(二)-如何用Spyne开发Webservice

    一.功能需求 本次案例是开发一个Item的新建的WebService.IN&OUT的类型JsonDocument. 通过传入相关的参数创建Item,且相关的参数可以被缺省. 二.实现代码 引入 ...

  3. 基于Python的Webservice开发(四)-泛微OA的SOAP接口

    一.功能需求 泛微e-cology可以在流程中调用Webservice接口实现与其他系统的联动等复杂功能.但是目前泛微文档中仅提供了调用的方法,但是没有关于接口的相关开发信息. 本次案例是用Pytho ...

  4. psutil一个基于python的跨平台系统信息跟踪模块

    受益于这个模块的帮助,在这里我推荐一手. https://pythonhosted.org/psutil/#processes psutil是一个基于python的跨平台系统信息监视模块.在pytho ...

  5. 【Python】如何基于Python写一个TCP反向连接后门

    首发安全客 如何基于Python写一个TCP反向连接后门 https://www.anquanke.com/post/id/92401 0x0 介绍 在Linux系统做未授权测试,我们须准备一个安全的 ...

  6. 初识TPOT:一个基于Python的自动化机器学习开发工具

    1. TPOT介绍 一般来讲,创建一个机器学习模型需要经历以下几步: 数据预处理 特征工程 模型选择 超参数调整 模型保存 本文介绍一个基于遗传算法的快速模型选择及调参的方法,TPOT:一种基于Pyt ...

  7. ShutIt:一个基于 Python 的 shell 自动化框架

    ShutIt是一个易于使用的基于shell的自动化框架.它对基于python的expect库(pexpect)进行了包装.你可以把它看作是“没有痛点的expect”.它可以通过pip进行安装. Hel ...

  8. 利用基于Python的Pelican打造一个自己的个人纯静态网站

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_100 其实呢这么多年以来我一直建议每个有技术追求的开发者都要有写技术博客记笔记的良好习惯,一来可以积累知识,二来可以帮助别人,三来 ...

  9. 基于Python的Webservice开发(一)-简介

    之前为了解决Webservice的开发,直接用Python自带的CGI模块挂在IIS上. 但是该方式开发Soap的接口,需要大量的开发,而且安全方面也存在很多问题. 我推荐关于用Python开发Web ...

随机推荐

  1. 【dva】如何监听异步请求是否完成(页面loading)

    方案1.你可以在model里面操作 在model里面的state里面声明一个变量state,默认是false,effect函数执行开始就将其改为true,然后等call()然后结束后又将其改为fals ...

  2. 『学了就忘』Linux系统管理 — 85、工作管理相关命令

    目录 1.工作管理简介 2.如何把命令放入后台 3.后台管理命令 (1)查看后台的工作 (2)将后台暂停的工作恢复到前台执行 (3)把后台暂停的工作恢复到后台执行 4.后台命令脱离登录终端运行 1.工 ...

  3. AtCoder Beginner Contest 169 题解

    AtCoder Beginner Contest 169 题解 这场比赛比较简单,证明我没有咕咕咕的时候到了! A - Multiplication 1 没什么好说的,直接读入两个数输出乘积就好了. ...

  4. CF706A Beru-taxi 题解

    Content 有一个人在点 \((a,b)\) 等出租车.已知他周围共有 \(n\) 辆出租车,其中第 \(i\) 辆车在点 \((x_i,y_i)\) 上,速度为 \(v_i\).这个人想打能让他 ...

  5. WebApi的前端调用

    WebApi前端调用 HTML代码: <!DOCTYPE html><html> <head> <meta charset="utf-8" ...

  6. SpringBoot整合zimg图片服务器

    依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</arti ...

  7. 输入npm install 报错npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-sass@4.13.1 postinstall: `node scripts/build.js`

    输入npm install 报以下错误 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! node-sass@4.13.1 postinstall: ...

  8. win10+vs2015编译nanogui

    !!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 说明: A.OS : win10 1909 ,没有配置OpenGL开发环境的 经历. B. ...

  9. 【LeetCode】799. Champagne Tower 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 参考资料 日期 题目地址:https:// ...

  10. 【LeetCode】31. Next Permutation 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 逆序数字交换再翻转 库函数 日期 题目地址:http ...