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

Uvicorn 完全指南:给小白的第一堂 ASGI 服务器课

Uvicorn 完全指南给小白的第一堂 ASGI 服务器课你写了一个 Python Web 应用兴冲冲地想把它跑起来却发现关键词一个接一个蹦出来ASGI、Uvicorn、Gunicorn、uvloop、httptools……它们像一串神秘代码让你不知道从哪里下手。别急这篇博客会把Uvicorn的底裤扒干净——用大白话、打比方、上代码保证你看完就能用而且知道自己在用什么。1. 先讲个故事服务员与餐厅想象你开了一家餐厅。厨师就是你的 Web 应用FastAPI、Django、Starlette 写的代码负责 “做菜”处理请求。服务员负责在客人和厨师之间传话接收客人点单HTTP 请求告诉厨师再把菜端回去HTTP 响应。这个服务员在 Python Web 世界里叫做服务器Server。如果你用的框架是Flask、Django 传统版同步模式服务员一次只能服务一桌客人。上一桌的菜没上齐下一桌就只能干等——这就是WSGI 服务器的工作方式。而如果你用的是FastAPI、Django Channels、Starlette这类支持异步的框架服务员可以眼观六路耳听八方点单、端菜、催厨房同时进行效率高得飞起。这时候你需要一个懂异步的服务员——这就是ASGI 服务器。Uvicorn 就是目前最流行的 ASGI 服务器名字来源于 “Unicorn”独角兽开头加了个 “UV”代表它底层依赖的两个高性能库uvloop和httptools。它快、轻量而且是异步的。2. 为什么需要 UvicornWSGI 与 ASGI 的区别我们先来理清两个容易混淆的协议。WSGIWeb Server Gateway Interface这是 Python Web 的老传统同步处理请求。模型是一个请求 → 一个线程 → 一直等到返回响应。适合 CPU 密集型或有大量阻塞调用的场景比如传统的 Django。ASGIAsynchronous Server Gateway Interface这是新时代的异步标准支持WebSocket、长轮询、并发请求等花活。模型是一个请求 → 一个协程 → 遇到 IO 就挂起去处理别的请求。适合高并发、实时通信的 App比如聊天室、实时数据面板。同步 WSGI 服务生一桌点完 → 送厨房 → 死等出菜 → 端上 → 再招呼下一桌 异步 ASGI 服务生一桌点完 → 送厨房 → 立刻去招呼第二桌、第三桌 → 哪桌菜好了就送哪桌Uvicorn 就是一个实现了 ASGI 协议的服务器它能把你的异步 Web 应用高效地运行起来。3. Uvicorn 的超能力来自哪里Uvicorn 的 “UV” 指的是两个底层库uvloop—— 用 Cython 重写的 asyncio 事件循环直接复用 libuvNode.js 用的那套比 Python 默认事件循环快 24 倍。httptools—— 用 C 写的 HTTP 解析器比纯 Python 解析器快得多。这俩组合在一起让 Uvicorn 成为了目前 Python 异步服务器里的速度之最。你知道有多快吗官方基准测试里它能轻松跑到每秒几万请求量完全就是个小钢炮。另外Uvicorn 还支持HTTP/1.1和HTTP/2WebSocket进程管理器可以开多个 worker热重载开发时自动重启4. 安装 Uvicorn两步搞定# 最简安装pipinstalluvicorn# 如果你需要标准组合加上 uvloop 和 httptoolspipinstalluvicorn[standard]装standard会顺带装上uvloop、httptools、websockets、watchfiles性能拉满开发体验也更好。5. 你的第一个 Uvicorn 应用我们写个最小的 ASGI 应用不用任何框架感受一下 Uvicorn 怎么跑它。# app.pyasyncdefapp(scope,receive,send): ASGI 应用标准接口 - scope: 请求的元信息类型、头、路径等 - receive: 用来接收消息的协程 - send: 用来发送消息的协程 assertscope[type]http# 发送响应头awaitsend({type:http.response.start,status:200,headers:[[bcontent-type,btext/plain],],})# 发送响应体awaitsend({type:http.response.body,body:bHello, Uvicorn!,})然后在终端启动uvicorn app:app--reloadapp—— 模块文件名不含.py:app—— 模块里的 ASGI 应用对象--reload—— 代码变更时自动重启开发必备打开http://127.0.0.1:8000你会看到Hello, Uvicorn!。这就是 Uvicorn 的最简运行方式指定模块和应用它负责监听端口、解析 HTTP、把请求包装成 ASGI 标准喂给你的应用。6. 与 FastAPI 等框架搭档实际开发中你几乎不会手写上面那种原始的 ASGI 接口。你用的是FastAPI、Starlette、Django Channels这些框架。它们内部实现了 ASGI 标准Uvicorn 可以直接跑它们。FastAPI 例子# main.pyfromfastapiimportFastAPI appFastAPI()app.get(/)asyncdefroot():return{message:Hello World}启动uvicorn main:app--reload搞定。你写的所有异步async def路由Uvicorn 都天然支持而且是真·并发。为什么是 Uvicorn 而不是其他服务器Python 世界还有 ASGI 服务器DaphneDjango Channels 的默认服务器、Hypercorn。Uvicorn 之所以最主流是因为比 Daphne 更快比 Hypercorn 更轻量且安装简单生态最好几乎所有现代异步框架都优先推荐它7. Uvicorn 常用命令与配置基本命令参数uvicorn main:app\--host0.0.0.0\# 监听所有网络接口--port8000\# 指定端口--reload\# 开发模式热重载--log-level info\# 日志级别critical, error, warning, info, debug--workers4# 启动 4 个 worker 进程通过配置文件启动你也可以不用命令行写一个uvicorn.json或直接用 Python 代码启动。uvicorn.json:{app:main:app,host:0.0.0.0,port:8000,reload:true,workers:4}然后uvicorn--configuvicorn.jsonPython 代码启动importuvicornif__name____main__:uvicorn.run(main:app,host127.0.0.1,port8000,reloadTrue)环境变量Uvicorn 也支持用环境变量配置比如UVICORN_HOST、UVICORN_PORT、UVICORN_RELOAD等。这样在不同环境里部署就更灵活了。8. 理解 Worker 与并发模型--workers参数很关键弄懂它你才算真的理解了 Uvicorn。当你加上--workers 4时Uvicorn 会 fork 出4 个独立的子进程每个进程都是独立的 ASGI 服务器实例监听同一个端口通过 SO_REUSEPORT 或父进程分发。每个 worker 内部基于 uvloop asyncio 单线程协程模型能同时处理成千上万个连接。多个 worker 利用多核 CPU避免单进程只能跑满一个核的尴尬。一般推荐 workers 数量 CPU 核心数物理核数的 1 倍或 2 倍。⚠️ 但是开发时不要用--workers因为多进程下--reload可能不生效或行为怪异。开发时就用单进程 --reload生产环境再开多 worker。9. 生产部署Uvicorn Gunicorn 最佳组合虽然 Uvicorn 自带 worker 管理但在生产环境中更稳健的做法是使用Gunicorn Uvicorn 的 worker 类。Gunicorn 是 Python 世界老牌的生产级进程管理器成熟、稳定能处理各种边角情况如优雅重启、信号处理、日志配置等。为什么不用 Uvicorn 自带的 worker 管理Uvicorn 的进程管理器相对简单。而 Gunicorn 有更丰富的 worker 策略sync、gevent、uvicorn.workers.UvicornWorker 等更完善的进程生命周期管理各类 hooks比如启动前、退出前的回调更受运维工具如 Supervisor、systemd信任安装与启动pipinstallgunicorn uvicorn[standard]然后启动gunicorn main:app\-w4\# worker 数量-kuvicorn.workers.UvicornWorker\# 指定 worker 类为 Uvicorn 的异步 worker-b0.0.0.0:8000# 绑定地址在这里Gunicorn 是 “老板”负责管理 4 个子进程。每个子进程内部是一个运行着uvloop事件循环的 Uvicorn 服务器实例。这就是“用 Gunicorn 管理 Uvicorn”模式兼顾了稳定性和性能是目前生产环境部署 FastAPI、Starlette 等应用的黄金标准。10. 开发时的热重载与调试开发时最常用的参数就是--reload。默认它会监控当前目录下的所有.py文件有变化就自动重启。如果你安装了watchfilespip install watchfilesUvicorn 会优先用它来监听文件变化更省资源、响应更快。还可以用--reload-dir指定监控的目录uvicorn main:app--reload--reload-dir ./src日志方面--log-level debug可以打印出每个请求的详细信息方便调试。11. 常见误区与排坑指南① “我加了 async但为什么感觉还是串行的”如果你在async def函数里写了阻塞的同步调用比如time.sleep()、同步的数据库查询它会卡住整个事件循环。因为阻塞操作会掐断协程调度。解决方案异步代码里用await asyncio.sleep()数据库用异步驱动如asyncpg、databases等。② “我是 Windows 用户--workers莫名崩溃”Uvicorn 的多进程 worker 依赖于os.fork()这在 Windows 上不可用。Windows 上部署可以用一个进程或者用 Docker 封装。③ “我装了uvloop但怎么知道它在用”启动时如果看到日志里有Using uvloop字样就说明 uvloop 成功启用了。如果没有可能是安装不完整运行pip install uvicorn[standard]重装。12. 结尾Uvicorn 不是魔法是好朋友总结一下今天你带回家的知识点Uvicorn 是一个异步 ASGI 服务器专为高并发而生。它把uvloop极速事件循环 httptools快速 HTTP 解析装进一只独角兽里。你可以直接命令行启动它也可以在代码里调用uvicorn.run()。开发时用--reload热重载生产环境用Gunicorn Uvicorn worker稳稳跑。所有支持 ASGI 的 Python Web 框架FastAPI、Starlette、Django Channels都可以用 Uvicorn 起飞。当你写出第一行uvicorn main:app --reload并看到那个绿字日志时别害怕那是独角兽在告诉你你的异步之旅正式开始了。✨附速查卡片需求命令 / 代码本地开发启动uvicorn main:app --reload监听所有 IP--host 0.0.0.0多进程生产启动uvicorn main:app --workers 4Gunicorn 生产启动gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker用 Python 启动uvicorn.run(main:app, host0.0.0.0, port8000)监听 HTTPSuvicorn main:app --ssl-keyfile./key.pem --ssl-certfile./cert.pem查看所有参数uvicorn --help希望这篇指南能帮你把小独角兽彻底驯服。如果你还有疑问或者想进一步了解如何用 Nginx 配合 Uvicorn 承载静态文件、反向代理欢迎在评论区留言。我们一起把 Python Web 玩到飞起

相关文章:

Uvicorn 完全指南:给小白的第一堂 ASGI 服务器课

🦄 Uvicorn 完全指南:给小白的第一堂 ASGI 服务器课 你写了一个 Python Web 应用,兴冲冲地想把它跑起来,却发现关键词一个接一个蹦出来:ASGI、Uvicorn、Gunicorn、uvloop、httptools…… 它们像一串神秘代码&#xff0…...

Rust构建跨平台AI桌面应用:PoleStar Chat的多机器人协同与本地化实践

1. 项目概述:一个用Rust重写的跨平台AI聊天桌面应用如果你和我一样,每天的工作流里离不开ChatGPT、Claude或者Gemini,那你肯定也受够了在浏览器标签页之间来回切换,或者忍受着某些官方客户端那捉襟见肘的功能和时不时卡顿的体验。…...

从手机快充到笔记本供电:拆解USB PD 3.1 EPR模式下的‘增强功率数据对象’(APDO)

从手机快充到笔记本供电:拆解USB PD 3.1 EPR模式下的‘增强功率数据对象’(APDO) 当你的轻薄本需要240W供电时,传统USB PD协议已经无法满足需求。这正是USB PD 3.1引入EPR(扩展功率范围)模式的背景——它将功率上限从100W提升至24…...

豆包推出付费会员服务:免费版权益不变,三档会员方案详解

近期,豆包付费话题引发广泛关注。本文梳理豆包官方公布的免费权益、三档付费会员方案及其区别,供读者参考。一、免费版权益说明豆包官方明确表示,免费版服务将持续提供,不会下架、不会阉割功能、不会降低服务质量。所有用户使用同…...

Vivado仿真实战:AXI4 Narrow Transfer的wstrb信号到底怎么用?

Vivado仿真实战:AXI4 Narrow Transfer的wstrb信号深度解析与调试技巧 在FPGA和SoC开发中,AXI4总线协议因其高性能和灵活性成为业界标准。但当我们实际使用Vivado进行仿真时,Narrow Transfer机制下的wstrb信号往往成为调试的"拦路虎"…...

为什么越来越多足浴店,都在用索易软件?

温州索易软件开发有限公司(索易软件 SOE) 名称释义:索易(SOE)源自英文 “so easy”,意为 “就这么容易”,是企业核心理念与价值追求。 成立时间:2005年 03 月 24 日 总部地点&…...

从零构建AI助手:LangChain与RAG实战指南

1. 项目概述:一个面向开发者的AI助手实战课程最近在GitHub上看到一个挺有意思的项目,叫Johnxjp/ai-assistant-course。光看名字,你可能会觉得这又是一个讲怎么用ChatGPT聊天的教程。但点进去仔细研究后,我发现它的定位非常精准且务…...

使用 Taotoken CLI 工具一键配置开发环境与模型密钥

使用 Taotoken CLI 工具一键配置开发环境与模型密钥 在接入大模型 API 进行开发时,手动配置 API Key、Base URL 和模型 ID 是常见的步骤。这个过程不仅繁琐,而且在团队协作中,确保每位成员环境配置一致也颇具挑战。Taotoken 提供了一个官方的…...

Clawshell:开源命令行环境配置管理框架,打造可移植的开发工具箱

1. 项目概述:一个开源的“瑞士军刀”式工具箱如果你和我一样,是个喜欢折腾各种工具、脚本,又经常在不同设备间切换的开发者或运维,那你肯定也经历过这样的烦恼:常用的命令、脚本、配置文件散落在各处,每次换…...

从香蕉到芯片:工程师如何用状态识别思维调试FPGA/CPLD系统

1. 从香蕉到芯片:一个工程师的跨界思考前几天在超市,看到有人扛着一大串香蕉,黄澄澄的,形状还有点奇特。这让我一下子走了神,思绪从水果摊飘到了我的工作台——那些排列整齐、闪着金属光泽的FPGA和CPLD开发板。你可能觉…...

从QGIS样式配置到GeoServer发布:手把手教你制作并导出SLD文件

从QGIS样式配置到GeoServer发布:手把手教你制作并导出SLD文件 在GIS工作流中,地图样式的可视化表达与跨平台复用一直是工程师的核心痛点。当你在QGIS中精心调配的渐变色带、分类符号在GeoServer中无法直接复用时,SLD(Styled Layer…...

【无人机通信】无人机自主巡航+5G 通信质量监测MATLAB仿真平台,模拟无人机飞 4 个基站,记录信号强度,带 3D 可视化、电子围栏、自动起降、自动返航

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。 🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &…...

如何永久保存微信聊天记录?开源工具WeChatMsg完整解决方案

如何永久保存微信聊天记录?开源工具WeChatMsg完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

《WebPages Razor》深度解析

《WebPages Razor》深度解析 引言 随着互联网技术的飞速发展,Web开发领域不断涌现出新的技术和框架。其中,Razor视图引擎作为一种流行的Web开发工具,受到了广泛的关注。本文将深入解析Razor视图引擎,探讨其在Web开发中的应用、优势以及未来发展趋势。 一、Razor简介 Ra…...

【车辆】大规模连接车辆协作自动化的并行优化算法附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。 🍎完整代码获取 定制创新 论文复现点击:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 &…...

Sketch MeaXure:重构设计标注工作流的技术架构与实践指南

Sketch MeaXure:重构设计标注工作流的技术架构与实践指南 【免费下载链接】sketch-meaxure 项目地址: https://gitcode.com/gh_mirrors/sk/sketch-meaxure 在现代UI/UX设计工作流中,设计标注是连接设计与开发的关键桥梁,然而这一环节…...

如何在Navicat中使用导出数据库完整数据字典_架构师必备技能

Navicat无法一键导出完整数据字典,需手动执行information_schema查询组合表结构、字段注释、索引及外键信息,再导出为Excel/CSV;注意字符集设为utf8mb4并选UTF-8编码,避免注释乱码或为空。导出 MySQL 数据库的完整数据字典&#x…...

如何设计MongoDB的金融交易流水表_防篡改与精确金额存储Decimal128.txt

RAII是C中通过对象生命周期自动管理资源的唯一可靠方式,构造获取资源、析构释放资源,确保异常安全;需禁用拷贝、实现移动语义、析构函数noexcept。RAII 是什么,为什么不能靠 try-catch 或手动 freeRAII 不是语法糖,也不…...

第七章 供水科学调度的智能调度

1. 供水调度技术发展的三个阶段 1.1 供水调度技术发展可分为三个阶段: 供水科学调度系统的发展历程可以分为三个阶段:人工调度、科学调度和智能调度。 在第一个阶段,即人工调度阶段,系统主要依靠调度员的经验和技能进行供水调度。由于供水系统的规模和复杂性越来越大,人工…...

从资源收藏到实战应用:构建个人提示工程知识体系的系统指南

1. 从资源列表到实战指南:我如何构建自己的提示工程知识体系 看到这个名为“Awesome GPT Prompt Engineering”的列表,我仿佛看到了两年前的自己。当时,面对ChatGPT的横空出世,我既兴奋又迷茫。兴奋的是,一个全新的、…...

EasyInstruct框架:模块化指令处理与高质量数据集构建实战

1. 项目概述:一个为大型语言模型设计的指令处理框架如果你正在研究或应用像GPT-4、LLaMA、ChatGLM这样的大型语言模型,并且经常需要处理指令生成、筛选和提示工程这些繁琐的任务,那么你很可能需要一个能帮你标准化这些流程的工具。EasyInstru…...

从doctor-dok看自动化诊断工具:原理、实现与自定义检查实践

1. 项目概述:一个面向开发者的“健康医生”最近在GitHub上看到一个挺有意思的项目,叫Doctor-One/doctor-dok。光看名字,你可能会以为这是个医疗健康相关的应用,但实际上,它是一个专门为开发者、运维工程师和系统管理员…...

半导体巨头CEO续任风波:ST-Ericsson合资败局与战略转型启示

1. 项目概述:一场半导体巨头的CEO续任风波上周,我亲眼目睹了一个在金融圈里不太常见的场景:一家全球顶级半导体公司的CEO,在面向分析师和媒体的公开会议上,被直接问及自己的去留问题。这发生在2013年5月16日的伦敦&…...

为什么IT变更越来越谨慎,系统故障却还是越来越多?

很多企业的变更流程,正在变成一种“心理负担”在不少企业里,只要提到变更管理,团队第一反应往往不是“优化系统”,而是:“这次审批会不会很久?” “会不会又要开CAB?” “万一出问题怎么办&…...

UI2CodeN:基于视觉语言模型的UI转代码技术解析

1. 项目背景与核心价值UI2CodeN这个命名本身就透露着技术迭代的意味——后缀"N"暗示着这是第N代UI转代码方案。作为前端开发领域的老兵,我见证过从手工切图到Sketch插件生成代码的整个演进历程。当前主流方案普遍存在三个痛点:设计稿还原度不足…...

工程师的充电器管理指南:三级体系告别线缆混乱

1. 一个工程师的“充电器之海”自救指南如果你走进我家客厅的角落,你会看到一个堪称现代科技生活“奇观”的景象:一个号称能收纳所有充电器的“充电站”,上面缠绕着超过十根不同规格的线缆,它们像藤蔓一样交织在一起,连…...

2025届学术党必备的十大AI科研神器横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 这篇文章,系统地阐述了,DeepSeek系列论文的,核心技术架构…...

Hive JDBC vs MySQL JDBC:**“服务端推完就跑,客户端慢慢吃”**详解

一句话理解:MySQL服务端执行完查询后,会一次性把所有结果通过TCP流式推送给客户端,然后立刻解放资源(推完就跑);客户端收到后本地慢慢消费(慢慢吃),服务端完全不管客户端…...

2025届必备的十大降AI率网站实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在当下的学术写作范畴之内,专门用于专业论文创作的 AI 网站,已然变成…...

2026届最火的五大AI辅助论文平台实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 用于写作的AI软件,是借助自然语言处理以及深度学习技术的内容生成工具&#xff0…...