详细分析python中的from waitress import serve(附Demo)

目录

  • 前言
  • 1. 基本知识
  • 2. serve源码分析
  • 3. 基本操作

前言

以前玩python 开发的时候写过一些见解,推荐阅读:

  1. uwsgi启动django以及uwsgi.ini的配置参数详解
  2. Django框架零基础入门

部署服务器除了Flask还有`serve

在讲述serve之前,先讲述两者的对比

Flask 是一个轻量级的 Web 框架,而 serve 函数则是 waitress 服务器中的一个部分。

Flask:

  1. Web 框架
    Flask`是一个用 Python 编写的 Web 框架,旨在让开发者能够快速构建 Web 应用程序
    提供了路由、模板引擎、请求和响应处理、会话管理等功能,使得编写 Web 应用程序变得简单而灵活

  2. WSGI 应用程序
    Flask 应用程序是符合 WSGI 规范的,因此可以在任何兼容的 WSGI 服务器上运行,例如 waitress、gunicorn、uWSGI 等

  3. 开发
    Flask 通常用于开发阶段,可以轻松地创建原型或中小型的 Web 应用程序,并提供丰富的扩展库以满足各种需求

Serve(waitress)

  1. WSGI 服务器
    serve 函数是 waitress 服务器提供的一个函数,用于启动一个 WSGI 服务器,监听 HTTP 请求,并将其转发给指定的 WSGI 应用程序进行处理

  2. 生产部署
    serve 函数通常用于生产环境中,用于将 WSGI 应用程序(如 Flask 应用程序)部署到生产服务器上,以便处理真实的 HTTP 请求

  3. 性能和稳定性
    waitress 是一个专门用于生产环境的 WSGI 服务器,具有良好的性能和稳定性,可以处理大量的并发请求,同时提供了一些配置选项来优化服务器的行为

综上所述,Flask 是用于构建 Web 应用程序的框架,而 serve 函数是用于在生产环境中部署 WSGI 应用程序的服务器功能。
对此可以使用 Flask 来开发应用程序,并在部署时使用 serve 函数来启动服务器以处理用户请求

1. 基本知识

在Python中,waitress`是一个用于提供 WSGI (Web Server Gateway Interface) 应用程序的纯 Python Web 服务器

waitress`服务器提供了一种轻量级、高效的方式来运行 WSGI 应用程序,通常用于生产环境中

使用之前先导入包:from waitress import serve

2. serve源码分析

源码有助于深入了解:

主要是实现了 serve 函数的主要逻辑,包括根据传入的参数设置服务器的行为(如是否打印日志、是否启用性能分析等),以及启动 WSGI 服务器并监听 HTTP 请求的功能

#  接受参数 app,表示一个 WSGI 应用程序,以及其他关键字参数 kw
def serve(app, **kw):# _server 可以用于指定要使用的 WSGI 服务器的创建函数,默认为 create_server_server = kw.pop("_server", create_server)  # 从关键字参数 kw 中取出键为 _server 的值,如果不存在,则默认值为 create_server# _quiet 用于控制是否打印日志信息,如果为 True,则不打印日志信息_quiet = kw.pop("_quiet", False)  # 从关键字参数 kw 中取出键为 _quiet 的值,如果不存在,则默认值为 False# _profile 用于控制是否启用性能分析,如果为 True,则启用性能分析_profile = kw.pop("_profile", False)  # 从关键字参数 kw 中取出键为 _profile 的值,如果不存在,则默认值为 Falseif not _quiet:  # pragma: no cover# idempotent if logging has already been set uplogging.basicConfig()server = _server(app, **kw)if not _quiet:  # pragma: no coverserver.print_listen("Serving on http://{}:{}") # 打印服务器监听的地址和端口信息if _profile:  # 如果 _profile 为 True,即启用了性能分析,则执行以下代码块profile("server.run()", globals(), locals(), (), False)else:# 如果 _profile 不为 True,即未启用性能分析,则执行以下代码块# 启动 WSGI 服务器,开始监听 HTTP 请求,并将其传递给 WSGI 应用程序进行处理server.run()def serve_paste(app, global_conf, **kw):serve(app, **kw)return 0# 对 server.run() 进行性能分析,使用 profile 函数来执行,并打印分析结果
def profile(cmd, globals, locals, sort_order, callers):  # pragma: no cover# runs a command under the profiler and print profiling output at shutdownimport osimport profileimport pstatsimport tempfilefd, fn = tempfile.mkstemp()try:profile.runctx(cmd, globals, locals, fn)stats = pstats.Stats(fn)stats.strip_dirs()# calls,time,cumulative and cumulative,calls,time are usefulstats.sort_stats(*(sort_order or ("cumulative", "calls", "time")))if callers:stats.print_callers(0.3)else:stats.print_stats(0.3)finally:os.remove(fn)

3. 基本操作

假设有一个名为 myapp 的 WSGI 应用程序,可以使用 waitress 来启动该应用程序并监听 HTTP 请求,如下所示:

from waitress import serve
from myapp import appserve(app, host='0.0.0.0', port=8080)

在此示例中,myapp 是 WSGI 应用程序模块,app 是应用程序实例

serve 函数将此应用程序启动在主机 0.0.0.0 和端口 8080 上,以便其他计算机可以通过该主机和端口访问您的应用程序

在实际操作中相差不了多少:

from interface_api import app
from waitress import serveif __name__ == "__main__":print("服务启动成功: http://127.0.0.1:5678/")serve(app, host='0.0.0.0', port=5678)print("退出")

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/673853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全名词解析-社工、0day、DDos攻击

为方便您的阅读,可点击下方蓝色字体,进行跳转↓↓↓ 01 社工02 0day漏洞03 DDoS攻击 01 社工 社工(Social Engineering),一般指社会工程攻击的简称,是一种通过与人的交互来获取信息、获取访问权限或进行欺骗…

前端vue3实现本地及在线文件预览(含pdf/txt/mp3/mp4/docx/xlsx/pptx)

一、仅需实现在线预览,且文件地址公网可访问 (一)微软office免费预览(推荐) 支持doc/docx/xls/xlsx/ppt/pptx等多种office文件格式的免费预览 //示例代码//​在https://view.officeapps.live.com/op/view.aspx?src…

【Qt】Android上运行keeps stopping, Desktop上正常

文章目录 问题 & 背景背景问题 解决方案One More ThingTake Away 问题 & 背景 背景 在文章【Qt】最详细教程,如何从零配置Qt Android安卓环境中,我们在Qt中配置了安卓开发环境,并且能够正常运行。 但笔者在成功配置并完成上述文章…

(每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第10章 项目进度管理(三)

博主2023年11月通过了信息系统项目管理的考试,考试过程中发现考试的内容全部是教材中的内容,非常符合我学习的思路,因此博主想通过该平台把自己学习过程中的经验和教材博主认为重要的知识点分享给大家,希望更多的人能够通过考试&a…

2024/2/7总结

Node.js 什么是node.js node.js是一个基于chrome v8 引擎的 JavaScript 运行环境。 浏览器是JavaScript的前端运行环境node.js是JavaScript的后端运行环境 node.js中无法调用DOM和BOM等浏览器内置API fs模块 是node.js官方提供的、用来操作文件的模块,它提供了一系…

初识 Protobuf 和 gRpc

初步了解 Protobuf 和 gRpc Protocol Buffers Protocol Buffers(又称protobuf)是谷歌的语言无关、平台无关、可扩展的机制,用于序列化结构化数据。您可以在protobuf的文档中了解更多关于它的信息。 ProtoBuf 的定义 ProtoBuf是将类的定义…

PostgreSql与Postgis安装

POstgresql安装 1.登录官网 PostgreSQL: Linux downloads (Red Hat family) 2.选择版本 3.安装 ### 源 yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm ### 客户端 yum install postgresql14 ###…

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查

Python使用zdppy_es国产框架操作Elasticsearch实现增删改查 本套教程配套有录播课程和私教课程,欢迎私信我。 Docker部署ElasticSearch7 创建基本容器 docker run -itd --name elasticsearch -p 9200:9200 -e "discovery.typesingle-node" -e ES_JAVA_…

Docker的镜像和容器的区别

1 Docker镜像 假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的。这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态。 一个Docker镜像可以构建于另一个Docker镜像之上&…

P2957

题目描述 The cows enjoy mooing at the barn because their moos echo back, although sometimes not completely. Bessie, ever the excellent secretary, has been recording the exact wording of the moo as it goes out and returns. She is curious as to just how mu…

numa网卡绑定

#概念 参考:https://www.jianshu.com/p/0f3b39a125eb(opens new window) chip:芯片,一个cpu芯片上可以包含多个cpu core,比如四核,表示一个chip里4个core。 socket:芯片插槽,颗,跟…

Sping Cloud Hystrix 参数配置、简单使用、DashBoard

Sping Cloud Hystrix 文章目录 Sping Cloud Hystrix一、Hystrix 服务降级二、Hystrix使用示例三、OpenFeign Hystrix四、Hystrix参数HystrixCommand.Setter核心参数Command PropertiesFallback降级配置Circuit Breaker 熔断器配置Metrix 健康统计配置Request Context 相关参数C…

Docker容器监控-CIG

目录 一、CIG说明 1. CAdvisor 2. InfluxDB 3. Grafana 二、环境搭建 1. 创建目录 2. 编写 docker-compose.yml 3. 检查并运行容器 三、进行测试 1. 查看 influxdb 存储服务 是否能正常访问 2. 查看 cAdvisor 收集服务能否正常访问 3. 查看 grafana 展现服务&#…

金融行业专题|证券超融合架构转型与场景探索合集(2023版)

更新内容 更新 SmartX 超融合在证券行业的覆盖范围、部署规模与应用场景。新增操作系统信创转型、Nutanix 国产化替代、网络与安全等场景实践。更多超融合金融核心生产业务场景实践,欢迎阅读文末电子书。 在金融行业如火如荼的数字化转型大潮中,传统架…

路由器如何映射端口映射?

在现代互联网中,随着网络应用的不断发展,很多用户需要进行远程访问或搭建服务器来满足自己的需求。由于网络安全的原因,直接将内网设备暴露在公网中是非常危险的。为了解决这个问题,路由器映射端口映射技术应运而生。本文将介绍什…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Span组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Span组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Span组件 鸿蒙(HarmonyOS)作为Text组件的子组件&#xff0…

【开源】JAVA+Vue+SpringBoot实现公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

微信小程序新手入门教程四:样式设计

WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式,决定了 WXML 的组件会怎么显示。 WXSS 具有 CSS 大部分特性,同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改。与 CSS 相比,WXSS …

Tkinter教程21:Listbox列表框+OptionMenu选项菜单+Combobox下拉列表框控件的使用+绑定事件

------------★Tkinter系列教程★------------ Tkinter教程21:Listbox列表框OptionMenu选项菜单Combobox下拉列表框控件的使用绑定事件 Tkinter教程20:treeview树视图组件,表格数据的插入与表头排序 Python教程57:tkinter中如何…

Flink Format系列(2)-CSV

Flink的csv格式支持读和写csv格式的数据,只需要指定 format csv,下面以kafka为例。 CREATE TABLE user_behavior (user_id BIGINT,item_id BIGINT,category_id BIGINT,behavior STRING,ts TIMESTAMP(3) ) WITH (connector kafka,topic user_behavior…