对于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. Redis单点到集群迁移

    目录 一.简介 一.简介 1.环境 源 192.168.1.185的6379 目标 192.168.1.91的7001,7002 192.168.1.92的7003,7004 192.168.1.94 ...

  2. Mysql报错合集

    目录 一.链接报错 客户端连接mysql出错 链接客户端出错 交互登陆mysql出现warning警告Using a password 导入数据到数据库报错ERROR 1050 登陆数据库提示-bas ...

  3. 别被调查汇总郁闷到——有Excel呢!

    年初的某天,我在家待得好好的,好吧,其实也不是待得好好的,这事大家都知道,新冠病毒嘛,都锁家里了,还好本妖向来宅--呃--跑题了--肥来! 其实我能在家好好地待着,有水有电有Wi-Fi,那是有多少人冒 ...

  4. 手动上下eureka上面服务

    手动下eureka curl -X PUT http://eureka.xxx.xxx.com/eureka/apps/VIDEO-API/111.111.111.111:test-api:0000/ ...

  5. 数据改变认知——不知怎么选,用RFM模型看舔狗质量!

    假设我长得很漂亮,拥有众多追求者,但是初出闺房的我对这世界上的男人毫无认知,那么该如何选择呢?这真是一个问题! 妈妈说,愿意为我花钱的男人未必爱我,但不愿意为我花钱的男人必定不爱我,而后传授了一套RF ...

  6. 【LeetCode】1221. Split a String in Balanced Strings 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 统计 日期 题目地址:https://leetcode ...

  7. Misaki's Kiss again(hdu5175)

    Misaki's Kiss again Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  8. Codeforces 855B:Marvolo Gaunt's Ring(枚举,前后缀)

    B. Marvolo Gaunt's Ring Professor Dumbledore is helping Harry destroy the Horcruxes. He went to Gaun ...

  9. RocketMQ 消息丢失场景分析及如何解决

    生产者产生消息发送给RocketMQ RocketMQ接收到了消息之后,必然需要存到磁盘中,否则断电或宕机之后会造成数据的丢失 消费者从RocketMQ中获取消息消费,消费成功之后,整个流程结束 1. ...

  10. 解决ubuntu突然无法联网问题

    一.问题描述 今天使用笔记本远程办公的时候,突然电脑无法联网了,使用chrome浏览器访问网页出现如下错误 This site can't be reachedwww.baidu.com's serv ...