[python3]Uvicorn库
Uvicorn 是一个用于运行 ASGI(Asynchronous Server Gateway Interface)应用程序的轻量级服务器。ASGI 是 Python Web 应用程序接口的一种扩展,它不仅支持传统的同步 Web 请求处理,还支持异步请求处理、WebSockets 以及 HTTP/2。
https://github.com/encode/uvicorn
主要特点:
- 异步支持:Uvicorn 支持 Python 的
async和await语法,可以很好地处理基于协程的异步代码,这对于编写高效的 I/O 密集型应用特别有用。 - 高性能:它的性能与 Gunicorn 类似,甚至在某些情况下更优,尤其是在处理大量并发连接时。这使得 Uvicorn 成为生产环境中部署现代 Web 框架的理想选择。
- 简单配置:提供简单的命令行接口和配置选项,易于上手,并且文档清晰易懂。
- 热重载:开发过程中,当源代码更改时,Uvicorn 可以自动重启服务器,提高了开发效率。
- 兼容性:Uvicorn 兼容多个 ASGI 框架,如 FastAPI、Starlette 等,这些框架都充分利用了 Python 的异步特性来构建高效的应用程序。
使用方式:
通常,你会通过命令行来启动 Uvicorn 服务器。例如,如果你有一个名为 main.py 的文件,其中定义了一个 FastAPI 应用实例 app,你可以这样启动服务器:
uvicorn main:app --reload
这里的 main:app 表示从 main 模块(即 main.py 文件)中加载名为 app 的 ASGI 应用。--reload 参数用于启用热重载功能,在开发环境中非常有用。对于生产环境,你可能想要配置更多选项,比如工作进程数量、端口号等,可以根据官方文档进行相应的设置。
Uvicorn 是现代 Python Web 开发中不可或缺的一部分,特别是在需要高性能和异步支持的情况下。它帮助开发者快速搭建起能够处理高并发请求的服务端应用。
要快速开始使用 Uvicorn,你可以按照以下步骤操作。我们将以 FastAPI 为例来创建一个简单的异步 Web 应用,并使用 Uvicorn 来运行它。
第一步:安装必要的库
首先,确保你已经安装了 Python(建议使用 Python 3.7 或更高版本)。然后通过 pip 安装 uvicorn 和 fastapi:
pip install uvicorn fastapi
如果你计划使用更大的模型或框架(例如 PyTorch 或 TensorFlow),请根据需要安装额外的依赖包。
第二步:创建 FastAPI 应用
接下来,创建一个新的 Python 文件,比如 main.py,并在其中编写如下代码:
from fastapi import FastAPIapp = FastAPI()@app.get("/")
async def read_root():return {"message": "Hello, World!"}@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):return {"item_id": item_id, "q": q}
这段代码定义了一个 FastAPI 应用实例 app,并且为它配置了两个简单的路由。第一个路由 / 返回一个欢迎消息;第二个路由 /items/{item_id} 接受一个路径参数 item_id 和一个可选查询参数 q。
第三步:启动 Uvicorn 服务器
保存文件后,在命令行中导航到包含 main.py 文件的目录,并运行以下命令来启动 Uvicorn 服务器:
uvicorn main:app --reload
这里的 main:app 表示从 main 模块(即 main.py 文件)中加载名为 app 的 ASGI 应用。--reload 参数用于启用热重载功能,在开发环境中非常有用。如果你不在开发环境中,则可以省略这个参数。
第四步:测试你的应用
Uvicorn 将在本地的 127.0.0.1(localhost)和端口 8000 上运行你的应用程序。你可以通过访问以下 URL 来测试这两个路由:
- 访问根路径:
http://127.0.0.1:8000/ - 访问带有参数的路径:
http://127.0.0.1:8000/items/42?q=somequery
此外,FastAPI 自带了一个交互式的 API 文档界面,可以通过访问 http://127.0.0.1:8000/docs 来查看和测试 API。
总结
以上就是使用 Uvicorn 和 FastAPI 创建并运行一个简单异步 Web 应用的快速入门指南。这只是一个基础的例子,FastAPI 和 Uvicorn 都提供了更多的特性和配置选项来满足不同的需求。
相关文章:
[python3]Uvicorn库
Uvicorn 是一个用于运行 ASGI(Asynchronous Server Gateway Interface)应用程序的轻量级服务器。ASGI 是 Python Web 应用程序接口的一种扩展,它不仅支持传统的同步 Web 请求处理,还支持异步请求处理、WebSockets 以及 HTTP/2。 h…...
istio-proxy oom问题排查步骤
1. 查看cluster数量 cluster数量太多会导致istio-proxy占用比较大的内存,此时需检查是否dr资源的host设置有配置为* 2. 查看链路数据采样率 若采样率设置过高,在压测时需要很大的内存来维护链路数据。可以调低采样率或增大istio-proxy内存。 检查iop中…...
Flutter:使用FVM安装多个Flutter SDK 版本和使用教程
一、FVM简介 FVM全称:Flutter Version Management FVM通过引用每个项目使用的Flutter SDK版本来帮助实现一致的应用程序构建。它还允许您安装多个Flutter版本,以快速验证和测试您的应用程序即将发布的Flutter版本,而无需每次等待Flutter安装。…...
关于物联网的基础知识(二)——物联网体系结构分层
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于物联网的基础知识(二&a…...
[程序设计]—代理模式
[程序设计]—代理模式👳 本文章记录学习于——52.面向切面:AOP-场景模拟_哔哩哔哩_bilibili 最近闲来无事,在学习Spring的源码: 后面慢慢更新源码系列blog,希望多多关注🙏🙏 目前已经总结的b…...
26、【OS】【Nuttx】用cmake构建工程
背景 之前wiki 14、【OS】【Nuttx】Nsh中运行第一个程序 都是用 make 构建,准备切换 cmake 进行构建,方便后续扩展开发 Nuttx cmake 适配 nuttx项目路径下输入 make distclean,清除之前工程配置 adminpcadminpc:~/nuttx_pdt/nuttx$ make …...
C#中序列化的选择:JSON、XML、二进制与Protobuf详解
C#中序列化的选择:JSON、XML、二进制与Protobuf详解 在C#开发中,序列化是将对象转换为可存储或传输的格式的过程,而反序列化则是将存储或传输的数据重新转换为对象的过程。选择合适的序列化方式对应用程序的性能、可维护性和兼容性至关重要。…...
单片机实现模式转换
[任务] 要求通过单片机实现以下功能: 1.单片机有三种工作模式(定义全局变量MM表示模式,MM1,2,3表示三种不同的模式) LED控制模式 风扇控制模式 蜂鸣器控制模式 2.可以在某一个模式下通过拓展板KEY1按键控制设备 (按…...
Shader -> SweepGradient扫描渐变着色器详解
XML文件 <com.example.myapplication.MyViewxmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_gravity"center"android:layout_height"400dp"/>自定义View代码 c…...
鼠标过滤驱动
文章目录 概述代码参考资料 概述 其编写过程大体与键盘过滤驱动相似,只需要切换一下附加的目标设备以及创建的设备类型等。但在该操作后依然无法捕获到Vmware创建的win7操作系统的鼠标irp信息,于是通过在获取鼠标驱动,遍历其所有的设备进而附…...
【深度学习】数据操作入门
数据操作 为了能够完成各种数据操作,我们需要某种方法来存储和操作数据。 通常,我们需要做两件重要的事:(1)获取数据;(2)将数据读入计算机后对其进行处理。 如果没有某种方法来存储…...
WIFIAP项目 5G RX二次谐波超标案例分析
一、 问题的现象及描述 采用博通WIFI方案方案的两个项目在做CE高频杂散测试时发现5G RX出现10.359 GHz的高频杂散点,通过更换信道,该杂散点跟着改变,最终确认该频率是5G主信号的二倍频;如下图: 二、 问题分析 由于…...
HarmonyOS(ArkUI框架介绍)
ArkUI框架介绍 ArkUI简介 基本概念 UI: 即用户界面。开发者可以将应用的用户界面设计为多个功能页面,每个页面进行单独的文件管理,并通过页面路由API完成页面间的调度管理如跳转、回退等操作,以实现应用内的功能解耦。 组件&…...
在 Ubuntu 下通过 Docker 部署 MySQL 服务器
引言 Docker 是一个开源的容器化平台,允许开发者将应用及其依赖打包成一个标准化的单元。MySQL 是一个广泛使用的关系型数据库管理系统,因其高性能、可靠性和易用性,成为许多应用的首选数据库。结合 Docker 和 MySQL,可以轻松地创…...
MCU 和 PSK
在加密和认证领域,MCU 和 PSK 是两个不同的概念,分别涉及硬件和密钥管理。下面是它们的含义和相关解释: 1. MCU 全称:Microcontroller Unit(微控制单元) 用途: MCU 是一种集成了 CPU、内存&am…...
Linux:进程概念(二.查看进程、父进程与子进程、进程状态详解)
目录 1. 查看进程 1.1 准备工作 1.2 指令:ps—显示当前系统中运行的进程信息 1.3 查看进程属性 1.4 通过 /proc 系统文件夹看进程 2. 父进程与子进程 2.1 介绍 2.2 getpid() \getppid() 2.3 fork()函数—通过系统调用创建进程 fork()函数疑问 3. 进程状态…...
苍穹外卖07——来单提醒和客户催单(涉及SpringTask、WebSocket协议、苍穹外卖跳过微信支付同时保证可以收到订单功能)
Spring Task介绍 应用场景: 信用卡每月还款提醒银行贷款每月还款提醒火车票销售系统处理未付款订单入职纪念日为用户发送通知 cron表达式 cron表达式其实就是一个字符串,通过cron表达式可以定义任务触发的时间。 构成规则:分为6或7个域&…...
C语言二级考试
你必须知道的 二级考试不是编写程序,或者说不只是编程的考核,它还会考核计算机C语言相关语言还有内涵等基础知识,比较全面综合(说人话,要看最新考纲具备一定的基础知识) 考试时间 120 分钟 分值 100 分&…...
IDEA Maven构建时报错:无效的目标发行版17
报错分析 报错原因:Maven 构建时,Java 版本配置不匹配 我安装的JDK版本是1.8,但由于种种原因,Maven构建时指定了 Java 17 作为目标发行版,从而导致错误 解决方案 首先,java -version,查看环…...
javafx 将项目打包为 Windows 的可执行文件exe
要将 JavaFX 项目打包为 .exe 文件,你可以使用一些工具将你的应用程序封装为 Windows 可执行文件。以下是两种常用的方法: 方法 1:使用 jpackage(适用于 JDK 14 及更高版本) jpackage 是 JDK 内置的工具,…...
从滤波到故障诊断:手把手教你用MATLAB实现信号互相关分析的实际项目
从振动信号到故障定位:MATLAB互相关分析的工业实战指南 车间里那台大型离心泵的异常振动已经持续两周了。王工程师带着加速度传感器采集了三组不同位置的振动信号,屏幕上跳动的波形看起来杂乱无章。"到底是轴承磨损还是叶轮不平衡?"…...
别再折腾LangChain了!用Ollama + DeepSeek R1在WSL2上5分钟搞定本地知识库问答
5分钟极简方案:用OllamaDeepSeek R1在WSL2搭建高效本地知识库 当开发者首次接触本地知识库系统时,往往会被LangChain等框架的复杂性劝退。本文将介绍一种绕过传统复杂流程的极简方案,只需5分钟即可在Windows 11的WSL2环境中搭建可用的问答系统…...
Qwen3.5-9B-AWQ-4bit惊艳效果展示:OCR辅助+场景描述真实生成作品集
Qwen3.5-9B-AWQ-4bit惊艳效果展示:OCR辅助场景描述真实生成作品集 1. 开篇:认识这个视觉理解高手 第一次看到Qwen3.5-9B-AWQ-4bit处理图片的效果时,我着实被惊艳到了。这个模型不仅能准确识别图片中的物体和场景,还能把画面内容…...
Windows 10/11下Frida逆向分析环境搭建避坑指南(含ADB驱动安装)
Windows 10/11逆向工程实战:Frida环境搭建全流程与疑难解析 逆向工程的世界就像一场数字考古,而Frida无疑是当前最趁手的工具之一。但很多新手在Windows平台搭建Frida环境时,往往会陷入Python版本地狱、ADB驱动失效、设备连接失败等连环陷阱。…...
基于STM32微控制器的DHT11环境温湿度监测系统设计与实现
基于stm32的环境温湿度监测系统设计(DHT11)最近在折腾STM32的环境监测小项目,发现DHT11这玩意儿真是便宜又好用。虽然精度比不上那些高端传感器,但做个室内温湿度监控绰绰有余。今天咱们直接开干,手把手搭个能跑的系统。硬件部分简单到哭&…...
AI对话与提示词--AI对话四象限框架:你与AI的四种协作关系
很多人跟AI聊天,只有一个模式:抛问题,等答案。 这就像去餐厅只会点"随便"——你永远吃不到想吃的菜。 真正高效的AI协作,需要先搞清楚一件事:你和AI之间,到底是谁知道什么。 一个框架ÿ…...
Optisystem仿真案例5-三种调制格式的FSO空间自由光通信系统 内容:搭建了OOK、P...
Optisystem仿真案例5-三种调制格式的FSO空间自由光通信系统 内容:搭建了OOK、PPM、BPSK基本结构的三种调制格式的FSO空间自由光通信系统 形式:程序+附带解析 最近在搞FSO通信仿真,试了三种不同的调制格式——OOK、PPM、BPSK&…...
OpenClaw技能扩展:安装Qwen3-4B专用插件实现代码生成
OpenClaw技能扩展:安装Qwen3-4B专用插件实现代码生成 1. 为什么需要Qwen3-4B专用技能 作为一个长期与代码打交道的开发者,我一直在寻找能够提升编码效率的工具。当我第一次接触OpenClaw时,最吸引我的不是它的基础自动化能力,而是…...
LeetCode每日练习题---49.字母异位词分组
49.字母异位词分组 条件 已知: 字符串数组 目标: 将字母异位词组合在一起 思想(时间复杂度太高超时了) 我的想法是,双重遍历的暴力方法 , 先对字符串数组中的元素进行遍历 ,第一层遍历ÿ…...
如何彻底解决Windows快捷键冲突:Hotkey Detective完整指南
如何彻底解决Windows快捷键冲突:Hotkey Detective完整指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是…...
