当前位置: 首页 > news >正文

构建高效 Python Web 应用:框架与服务器的选择及实践

构建高效 Python Web 应用:框架与服务器的选择及实践

flyfish

从选择合适的 Web 框架(如 Flask 和 FastAPI)到部署时选用适当的 Web 服务器(如 Waitress、Gunicorn、uWSGI 和 Uvicorn)的全过程。它不仅介绍了各个框架和服务器的特点,还提供了具体的示例代码,帮助开发者根据项目需求做出最佳选择。

好的,我们将根据 Web 应用和 Web 服务器这两个主要类别重新整理上述知识,并为每个部分提供示例代码。

Web 应用框架

Flask

简介
Flask 是一个轻量级的 Python 微框架,适合快速开发小型应用或原型。它允许通过扩展添加额外的功能。

特点

  • 轻量、灵活
  • 社区活跃,扩展丰富
  • 不内置数据验证和序列化支持

示例代码

from flask import Flask, requestapp = Flask(__name__)@app.route('/')
def hello():return "Hello, Flask!"@app.route('/items', methods=['POST'])
def add_item():item = request.json.get('item')return {"received": item}if __name__ == '__main__':app.run(port=8080)
FastAPI

简介
FastAPI 是一个现代、高性能的 Web 框架,专注于构建 API(如 RESTful APIs),利用 Python 类型提示进行数据验证和序列化。

特点

  • 高性能
  • 自动化的数据验证和序列化
  • 自动生成 API 文档(Swagger UI 和 ReDoc)

示例代码

from fastapi import FastAPI, HTTPException
from pydantic import BaseModelapp = FastAPI()class Item(BaseModel):name: strdescription: str = Noneprice: floattax: float = None@app.get("/")
def read_root():return {"Hello": "World"}@app.post("/items/")
async def create_item(item: Item):return {"item_name": item.name, "item_price": item.price}# 使用 Uvicorn 启动应用:
# uvicorn your_app_module:app --reload

Web 服务器

Flask 自带的 Web 服务器

简介
主要用于开发阶段的快速测试和调试,不推荐用于生产环境。

示例代码
已在 Flask 示例中展示。

Waitress

简介
Waitress 是一个为 Python 应用设计的 WSGI 服务器,适用于生产环境,能够处理高并发请求。

示例代码

from flask import Flask
from waitress import serveapp = Flask(__name__)@app.route('/')
def hello():return "Hello, Waitress!"if __name__ == '__main__':serve(app, host='0.0.0.0', port=8080)
Gunicorn

简介
Gunicorn 是一个被广泛使用的 Python WSGI HTTP 服务器,简单易用且性能优越,适合生产环境。

示例代码

首先,确保安装了 Gunicorn:pip install gunicorn

然后使用以下命令运行应用:

gunicorn -w 4 -b 0.0.0.0:8080 your_app_module:app

其中 your_app_module 替换为 Python 文件名(不包含 .py 扩展名)。

uWSGI

简介
uWSGI 是一个功能强大的应用服务器,不仅支持 WSGI,还支持多种协议和语言。配置相对复杂,但提供了更高的灵活性。

示例代码

首先,确保安装了 uWSGI:pip install uwsgi

然后使用以下命令运行应用:

uwsgi --http :8080 --home /path/to/virtualenv --chdir /path/to/your/app -w your_app_module:app
  • /path/to/virtualenv 是虚拟环境路径。
  • /path/to/your/app 是应用程序所在的目录。
  • your_app_module 替换为 Python 文件名(不包括 .py 扩展名)。
Uvicorn

简介
Uvicorn 是一个高性能的 ASGI 服务器实现,非常适合与 FastAPI 配合使用。

示例代码

首先,确保安装了 Uvicorn:pip install uvicorn

然后使用以下命令运行 FastAPI 应用:

uvicorn your_app_module:app --reload

其中 your_app_module 替换为 Python 文件名(不包含 .py 扩展名)。

Web 应用框架:Flask 适合快速开发和原型设计,而 FastAPI 提供了高性能和自动化特性,更适合构建大型 API 服务。
Web 服务器:Flask 自带服务器适合开发环境;Waitress、Gunicorn 和 uWSGI 都是优秀的 WSGI 服务器,适用于生产环境;Uvicorn 则是专门用于 ASGI 应用的高性能服务器,特别适合与 FastAPI 结合使用。

相关文章:

构建高效 Python Web 应用:框架与服务器的选择及实践

构建高效 Python Web 应用:框架与服务器的选择及实践 flyfish 从选择合适的 Web 框架(如 Flask 和 FastAPI)到部署时选用适当的 Web 服务器(如 Waitress、Gunicorn、uWSGI 和 Uvicorn)的全过程。它不仅介绍了各个框架…...

LED灯闪烁实验:Simulink应用层开发

文章目录 1 阶段目标2 开发过程2.1 模型搭建2.2 模型仿真2.3 数据字典配置2.4 代码生成3 总结1 阶段目标 本文是《LED灯闪烁实验》的第三部分,会通过图文结合的方式,手把手带读者操作Simulink工具进行LED灯闪烁的应用层开发。 本章的开发可分解为如下若干过程: 方波输出建…...

在做题中学习(89):螺旋矩阵

解法:模拟 思路:创建ret数组,用变量标记原矩阵的行数和列数,遍历一个元素就push_back进ret数组,每次遍历完一行或一列,相应行/列数--,进行顺时针螺旋遍历到为0即可。 细节:要有边界…...

使用EasyExcel和多线程实现高效数据导出

​ 使用EasyExcel和多线程实现高效数据导出 1. 概述 在企业级应用中,数据导出是一个常见的需求。为了提高导出效率,尤其是在处理大量数据时,我们可以结合使用EasyExcel库和多线程技术。本文将详细介绍如何通过EasyExcel和多线程技术实现高…...

rabbitmq五种模式的实现——springboot

rabbitmq五种模式的实现——springboot 基础知识和javase的实现形式可以看我之前的博客 代码地址:https://github.com/9lucifer/rabbitmq4j-learning 一、进行集成 (一)Spring Boot 集成 RabbitMQ 概述 Spring Boot 提供了对 RabbitMQ 的自…...

每日学习Java之一万个为什么

9.Class <?> class1 Myclass.class 为什么要有通配符&#xff1f;传给谁用的&#xff1f; 首先&#xff0c;这里的class特指某个对象在JVM中的元数据集合。 有普通、接口、数组、基本类型、 void 类型、局部类、匿名类、枚举、注解 1.类型安全&#xff1a;通配符允许…...

寒假学习总结

整个寒假都走在数据结构与算法的路上&#xff0c;深入学习了其中多个板块&#xff0c;刷了一些与之对应的题目&#xff0c;下面来一期总结&#xff08;c&#xff09; &#xff08;emmm&#xff0c;主播在寒假试着去学习了几大语言的语法基础&#xff08;丢丢&#xff09; 如Ja…...

Java Web开发实战与项目——用户认证与授权模块开发

Web应用中&#xff0c;用户认证与授权是至关重要的功能&#xff0c;确保只有合法用户才能访问受保护的资源。Spring Security作为一个强大的安全框架&#xff0c;支持多种认证与授权方式。在本章节中&#xff0c;我们将深入探讨三种常见的用户认证与授权方案&#xff1a;基于To…...

力扣每日一题【算法学习day.129】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&#xff01;&#xff01;&#xff01; 习题 1.数组列表中的最大距离 题目链接…...

uni-app发起网络请求的三种方式

uni.request(OBJECT) 发起网络请求 具体参数可查看官方文档uni-app data:请求的参数; header&#xff1a;设置请求的 header&#xff0c;header 中不能设置 Referer&#xff1b; method&#xff1a;请求方法&#xff1b; timeout&#xff1a;超时时间&#xff0c;单位 ms&a…...

字节火山云DeepSeek接入教程,支持联网,速度超快。

大家好&#xff0c;我是苍何。 在使用 DeepSeek 官网&#xff0c;实在是卡的我差点学猪叫&#xff0c;于是我一直在寻找替代方案。 要求就 2&#xff1a;满血&#xff0c;速度快。&#xff08;当然能联网更好&#xff09;。 我也一度使用了如硅基流动 API&#xff0c;发现也开…...

C语言指针学习笔记

1. 指针的定义 指针&#xff08;Pointer&#xff09;是存储变量地址的变量。在C语言中&#xff0c;指针是一种非常重要的数据类型&#xff0c;通过指针可以直接访问和操作内存。 2. 指针的声明与初始化 2.1 指针声明 指针变量的声明格式为&#xff1a;数据类型 *指针变量名…...

FreeRTOS-rust 编译分析

目录介绍 FreeRTOS-rust ├── .cargo # 对 cargo 本身的配置 │ └── config.toml ├── Cargo.toml # 对当前工作空间的配置 ├── freertos-cargo-build # 负责对 freertos 源码进行编译 │ ├── Cargo.toml # 对当前 package 进行配置 │ └…...

【解决方法】vite-plugin-svg-icons使用中出现问题[vite] Cannot find package ‘fast-glob‘

问题长这样&#xff1a; 参考文章&#xff1a;https://medium.com/wumeng9028/vite-plugin-svg-icons-error-cannot-find-package-fast-glob-8cb03d19c0ac 解决方法&#xff1a;pnpm add fast-glob -D package.json {"vite-plugin-svg-icons": "2.0.1"…...

[Qt] 使用QUndoStack运行到cmd->isObsolete()崩溃

redo/undo中又push了 崩溃情况崩溃原因解决方法 崩溃情况 在正常调用QUndoStack的redo/undo时&#xff0c;崩溃在了这里 unknown:0 QWidget: Cannot create a QWidget without QApplication. 崩溃原因 在正常调用QUndoStack的redo/undo时&#xff0c;因为自身的逻辑处理&a…...

大白话实战Sentinel

Sentinel是SpringCloudAlibaba提供的用来做服务保护的框架,而服务保护的常见手段就是限流和熔断降级。在大型分布式系统里面,由于微服务众多,所以服务之间的稳定性需要做特别关注,Sentinel的核心包就提供了从多个维度去保护服务稳定的策略,而且这些保护策略都可以连接上Se…...

DL/CV领域常见指标术语(FLOPS/mIoU/混淆矩阵/F1-measure)------一篇入门

1. FLOPS、FLOPs和GFLOPs FLOPS: floating-point operations per second&#xff0c;每秒浮点运算次数&#xff0c;用来衡量硬件性能。 FLOPs&#xff1a;floating point of operations&#xff0c;是浮点运算次数&#xff0c;用来衡量算法、模型的复杂度。 GFLOPS&#xff…...

SprutCAMX16数控软件介绍

SprutCAM X 16 是一款功能强大的CAM&#xff08;计算机辅助制造&#xff09;软件&#xff0c;专为数控机床编程和制造过程优化设计。它广泛应用于机械加工、模具制造、3D打印等领域&#xff0c;支持多轴加工、车铣复合、机器人加工等多种加工方式。以下是SprutCAM X 16的主要特…...

Miniconda + VSCode 的Python环境搭建

目录&#xff1a; 安装 VScode 安装 miniconda 在VScode 使用conda虚拟环境 运行Python程序 1.安装 vscode 编辑器 官网链接&#xff1a;Visual Studio Code - Code Editing. Redefined 下载得到&#xff1a;&#xff0c;双击安装。 安装成功…...

TRELLIS 部署笔记

目录 依赖项安装 kaolin安装&#xff1a; 安装和运行报错解决 u2net.onnx 下载 解决方法&#xff0c;就是自行下载&#xff0c;然后拷贝到目录/root/.u2net bash测试u2net&#xff1a; 报错GaussianRasterizationSettings.__new__() got an unexpected keyword argument…...

终极键盘保护神器:iwck 一键锁定输入设备完全指南

终极键盘保护神器&#xff1a;iwck 一键锁定输入设备完全指南 【免费下载链接】I-wanna-clean-keyboard Block the keyboard input while you were eating instant noodles on your laptop keyboard. 项目地址: https://gitcode.com/gh_mirrors/iw/I-wanna-clean-keyboard …...

从ARM架构到台积电工艺:手把手教你读懂手机芯片发布会上的‘黑话’

从ARM架构到台积电工艺&#xff1a;手把手教你读懂手机芯片发布会上的‘黑话’ 每次手机新品发布会&#xff0c;厂商总爱用一堆专业术语轰炸观众——"X3超大核性能提升25%"、"全球首发4nm工艺"、"LPDDR5X内存带宽翻倍"。这些看似高大上的参数&a…...

3个关键步骤解决Firefox中GM_addElement脚本兼容性问题

3个关键步骤解决Firefox中GM_addElement脚本兼容性问题 【免费下载链接】scriptcat ScriptCat, a browser extension that can execute userscript; 脚本猫&#xff0c;一个可以执行用户脚本的浏览器扩展 项目地址: https://gitcode.com/gh_mirrors/sc/scriptcat Script…...

开源免费办公/开发常用软件网站

开源免费办公/开发常用软件网站 办公软件 Google谷歌浏览器 snipaste微软截图工具 多线程下载器 PC资源监控 Office软件: Notepad++ Notepad- - WinRar 7-zip Everything 视频播放器 开发工具 VScode Android Studio ADB Git Cywin Java开发工具 C/C++开发工具 MobaXterm Wire…...

舆情监测系统实战:从热搜翻车到智能预警,我总结了这些经验

前几天某汽车品牌因为一段车主维权视频直接冲上热搜&#xff0c;评论区炸了锅。等公关团队反应过来&#xff0c;话题阅读量已经破了两个亿。说实话&#xff0c;这种剧本我见过太多次了——凌晨三点出事&#xff0c;早上九点上班才发现&#xff0c;黄金处置期就这么白白浪费掉。…...

克隆 ESXi 虚拟机报错 Invalid configuration for device ‘0‘ 完整修复与避坑指南

本文针对 ESXi/vCenter 环境中克隆虚拟机后高频出现的 “Invalid configuration for device 0” 报错&#xff0c;拆解报错的核心根源 —— 克隆后残留的无效虚拟光驱、软驱空设备&#xff0c;提供图形化界面一键修复、命令行应急修复两套完整实操方案&#xff0c;补充批量处理…...

Chapter 18: System Reset

Chapter 18: System Reset 书籍: PCI Express Technology 3.0 (MindShare Press, 2012) 页码: Book Pages 641-680 | PDF Pages 700-740 学习日期: 2026-04-13本章概要 本章描述 PCIe 的系统复位机制&#xff0c;包括 Hot Reset、Warm Reset、Cold Reset、Fundamental Reset 以…...

意识盗版防御协议:软件测试从业者的专业防线与合规实践

在软件生命周期中&#xff0c;测试环节不仅是质量与安全的守门人&#xff0c;更是知识产权保护与合规性验证的关键节点。对于软件测试从业者而言&#xff0c;盗版软件的潜在威胁远超功能缺陷&#xff0c;它可能以“绿色版”、“破解补丁”或“非官方镜像”的形式&#xff0c;悄…...

别再只调参了!用Python手把手实现蝴蝶优化算法(BOA),解决你的工程优化难题

蝴蝶优化算法实战&#xff1a;用Python解决复杂工程优化问题 在工程实践中&#xff0c;我们常常会遇到各种复杂的优化问题——从机器学习模型的超参数调优到天线阵列设计&#xff0c;从资源分配到路径规划。这些问题往往具有多峰值、非线性、高维度等特点&#xff0c;传统的梯度…...

高效部署Dlib预编译包:Windows环境完整实战指南

高效部署Dlib预编译包&#xff1a;Windows环境完整实战指南 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binaries (.whl) for Python 3.7-3.14 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x Dlib Windows预编译包项…...