Flask、Werkzeug 和 WSGI 间的关系

news2024/9/20 15:38:23

一.Flask、Werkzeug和 WSGI 关系

1.WSGI Web 架构

Flask 是一个基于 Werkzeug 和 Jinja2 模板引擎的轻量级 Web 框架。Werkzeug 是 Flask 的底层 WSGI 工具包,它提供了 WSGI 服务器、请求和响应对象、路由等基础功能,Flask 在此基础上构建了更高级的 Web 框架功能。

2.Werkzeug简单示例

        Werkzeug可理解为WSGI开发服务器,使用 flask run 命令时,Flask 会启动一个基于 Werkzeug 的开发服务器。因此在用PyCharm调试Flask应用程序时,在Console会有WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.提示。
        Werkzeug的开发服务器提供了方便的调试功能,如自动重新加载代码更改,以及详细的错误页面,这些特性使得它成为开发过程中非常有用的工具。同时,Werkzeug还提供了请求和响应对象、实用的URL路由、中间件、测试客户端等,这些都极大地简化了Web应用的开发过程。
        使用 Werkzeug 创建一个基本 Web 应用程序的简单示例,如下所示:

from werkzeug.wrappers import Request, Response
from werkzeug.serving import run_simple

def application(environ, start_response):
    request = Request(environ)
    response = Response(f'Hello, {request.args.get("name", "World")}!')
    return response(environ, start_response)

if __name__ == '__main__':
    run_simple('localhost', 4000, application)

二.Werkzeug、Gunicorn 和 uWSGI 关系

Werkzeug 通常用于开发环境,因为它简单易用。Gunicorn 和 uWSGI 用于生产环境,服务于使用 Flask 等框架创建的 WSGI 应用程序(Flask 底层使用 Werkzeug)。

1.WSGI 介绍

(1)Werkzeug:一个用于 Python 的 WSGI 工具库,提供了创建和管理 WSGI 应用程序的工具。它包括一个简单的 WSGI 服务器,适用于开发环境。

(2)Gunicorn:一个用于 UNIX 的 Python WSGI HTTP 服务器。它采用预分叉工作模式,即分叉多个工作进程来处理请求。它设计用于生产环境,可以服务于 WSGI 应用程序。

(3)uWSGI:一个用于托管 Python Web 应用程序的全栈服务器。它支持多种协议,包括 WSGI,并且高度可配置。它也设计用于生产环境,可以服务于 WSGI 应用程序。

2.使用示例

(1)使用 Flask 和 Gunicorn

-w 4 这个选项设置了服务器的工作进程数为 4。Gunicorn 使用多进程模型,每个工作进程可以处理一个请求,设置多个工作进程可以提高服务器的并发处理能力。

gunicorn -w 4 myapp:app

(2)使用 Flask 和 uWSGI

该命令将启动一个 uWSGI 服务器,它将监听 9090 端口,运行 myapp.py 文件中的 app 对象,并使用 4 个进程和每个进程 2 个线程来处理并发的 HTTP 请求。这样的配置适合于生产环境,可以提供比开发服务器更高的性能和稳定性。

uwsgi --http :9090 --wsgi-file myapp.py --callable app --processes 4 --threads 2

三.生产环境 Gunicorn 和 Werkzeug 关系

如果生产环境使用 Gunicorn,那么 Werkzeug 还有什么作用呢?简单理解,Gunicorn 负责请求的接收和分发,而 Werkzeug 负责处理应用程序内部的 HTTP 请求与响应逻辑,二者互相协作。

1.开发工具包

Werkzeug 提供了许多有用的开发工具,如调试器和带有详细错误追踪的开发服务器。在开发环境中,Werkzeug 的开发服务器通常用于快速运行应用程序以进行调试,而生产环境则使用 Gunicorn。

2.请求和响应对象的处理

Werkzeug 仍然是 Flask 等框架的底层请求处理工具。即使在生产环境中使用 Gunicorn 处理 HTTP 请求,Gunicorn 依然会通过 Flask 使用 Werkzeug 来解析请求对象、构造响应对象、处理 cookies、URL 路径等。

3.路由和 URL 规则管理

Werkzeug 负责处理应用程序的 URL 路由规则。它管理 URL 的解析和调度,即使使用 Gunicorn 作为服务器,Werkzeug 仍然参与 URL 路径匹配和路由。

4.中间件支持

Werkzeug 提供了一些 WSGI 中间件,用于增强应用程序功能。例如,它可以提供代理支持、会话管理等,这些功能在生产环境中仍然有用。

参考文献

[1] Flask 初版架构源码解读:https://developer.aliyun.com/article/926601

[2] Flask 源码阅读计划:https://wiki.masantu.com/flask-insight-introduction

[3] Flask 源码篇:wsgi、Werkzeug 与 Flask 启动工作流程:https://blog.csdn.net/qq_43745578/article/details/129272779

NLP工程化(星球号)

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

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

相关文章

HelpLook VS GitBook,在线文档管理工具对比

在线文档管理工具在当今时代非常重要。随着数字化时代的到来,人们越来越依赖于电子文档来存储、共享和管理信息。无论是与团队合作还是与客户分享,人们都可以轻松地共享文档链接或通过设置权限来控制访问。在线文档管理工具的出现大大提高了工作效率和协…

性能调优

性能调优 应用程序在运行过程中经常会出现性能问题,比较常见的性能问题现象是: 通过top命令查看CPU占用率高,接近100甚至多核CPU下超过100都是有可能的。请求单个服务处理时间特别长,多服务使用skywalking等监控系统来判断是哪一…

电子束光刻过程中的场拼接精度

以下内容如有错误,请不吝指教,感谢! 1、EBL为什么会出现场拼接误差,如何解决? ChatGPT 说: 在电子束光刻(EBL)过程中,SOI(硅绝缘体)芯片上出现*…

计算机毕业论文题目:设计与实现一个校园通知信息系统

设计与实现一个校园通知信息系统是一个涉及多个方面的复杂项目,它旨在提高信息传递的效率和准确性,确保学生、教师以及学校管理人员能够及时获取到重要的通知信息。以下是关于如何设计并实现这样一个系统的详细说明: 1. 需求分析 用户…

【高中数学/不等式/数学归纳法/等比数列】证明伯努利不等式(1+h)^n>1+nh的三种方式

【伯努利不等式】 (1h)^n>1nh (h>0,n为大于1的自然数) 【数学归纳法证法】 证明: n2时,(1h)^212hh^2>12h 不等式成立 n3时,(1h)^313h3h^2h^3>13h 不等式成立 假设nk时,有(1h)^k>…

机房三大网络拓扑图,太实用了

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部 下午好,我的网工朋友。 通常来说,机房的三大网络拓扑图指的是星型拓扑、总线型拓扑和环形拓扑。 在实际的机房网络设计中…

vue项目加载cdn失败解决方法

注释index.html文件中 找到vue.config.js文件注释、

MySQL_图形管理工具简介、下载及安装(超详细)

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :&#x1…

【VUE3.0】动手做一套像素风的前端UI组件库---先导篇

系列文章目录 【VUE3.0】动手做一套像素风的前端UI组件库—Button 目录 系列文章目录引言准备素材字体鼠标手势图 创建vue3项目构建项目1. 根据命令行提示选择如下:2. 进入项目根目录下载依赖并启动。3. 设置项目src路径别名,方便后期应用路径。4. 将素…

Debian 12上安装google chrome

当前系统:Debian 12.7 昨天在Debian 12.7上安装Google Chrome时,可能由于网络原因,导入公钥始终失败。 导致无法正常使用命令#apt install google-chrome-stable来安装google chrome; 解决办法: Step1.下载当前google chrome稳…

C++性能优化-代码角度

减少跳转/分支语句和函数调用 原因 分支语句:当 CPU 执行到分支语句时,将会进行分支预测(对大部分PC)。如果分支预测错误,就会清空已经预取和执行的部分指令,重新从正确的分支开始取指和执行,…

某东-h5st参数逆向分析

目标:商品搜索翻页接口 直接搜索h5st就可以搜到,所有可疑位置都打上断点,然后翻页,最终断点位置: window.PSign.sign(colorParamSign)是异步代码,colorParamSign是传入的参数,执行后把包含h5st…

基于YOLOv5的教室人数检测统计系统

基于YOLOv5的教室人数检测统计系统可以有效地用于监控教室内的学生数量,适用于多种应用场景,比如 自动考勤、安全监控或空间利用分析 以下是如何构建这样一个系统的概述,包括环境准备、数据集创建、模型训练以及如何处理不同类型的媒体输入…

【机器学习】--- 序列建模与变分自编码器(VAE)

在机器学习领域,序列建模与变分自编码器(Variational Autoencoder, VAE) 是两个至关重要的技术,它们在处理时间依赖性数据与复杂数据生成任务中都发挥着关键作用。序列建模通常用于自然语言处理、语音识别等需要保持顺序关系的任务…

【老板必看!】电脑怎么看使用软件时间记录?一文读懂5种超实用的方法!

在企业管理中,电脑虽不善言语、不会说话,但会留下无数线索,就像一场未解之谜,等待着各位福尔摩斯得到来,去揭开它的秘密面纱。 你是否曾好奇过,当你不在的时候,员工都在用电脑都在忙些什么&…

基于python+django+vue的影视推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的影…

大表数据如何在OceanBase中进行表分区管理的实践

背景 将Zabbix的数据库迁移至OceanBase后,以其中的几个大表作为案例,本文将分享如何利用ODC(OceanBase 开发者工具),来进行自动管理OB数据库中的表分区的方案。 因为原始表里已经有大量的数据,如果贸然对…

快速掌握Postman接口测试

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、前言 在前后端分离开发时,后端工作人员完成系统接口开发后,需要与前端人员对接,测试调试接口,验证接口的正…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL16

使用8线-3线优先编码器Ⅰ实现16线-4线优先编码器 描述 ②请使用2片该优先编码器Ⅰ及必要的逻辑电路实现16线-4线优先编码器。优先编码器Ⅰ的真值表和代码已给出。 可将优先编码器Ⅰ的代码添加到本题答案中,并例化。 优先编码器Ⅰ的代码如下: module…

BERT模型解读与简单任务实现(论文复现)

BERT模型解读与简单任务实现(论文复现) 本文所涉及所有资源均在传知代码平台可获取 概述 相关背景 语言模型:语言模型是指对于任意的词序列,它能够计算出这个序列是一句话的概率。 预训练:预训练是一种迁移学习的概念…