第10章 中间件的使用

发布时间:2026/7/31 3:31:32

第10章 中间件的使用
第10章 中间件的使用10.1 Python 同步与异步你是否遇到过这样的场景用 Python 写了一个下载图片的脚本它却要一张下载完才能开始下一张效率低得让人着急或者写了个简单的 Web 服务一个慢请求就能卡住后面所有用户其实这背后藏着 Python 中同步与异步的核心逻辑——它们决定了程序如何“安排时间”直接影响着代码的效率。今天我们就用最通俗的语言拆解同步与异步的本质再通过实战案例告诉你什么时候该用同步什么时候该用异步以及异步到底是怎么“提速”的。同步和异步跟多线程没有关系异步可以提高效率。一、先搞懂同步和异步到底在“同步”什么其实同步和异步的核心是程序处理“任务”的顺序和等待逻辑。我们用生活中的例子就能瞬间明白二者的区别。1. 同步“排队办事等完一个再一个”想象你去银行办理业务只有一个窗口对应程序的“单线程”• 你先取号排队前面的人不办完你只能等着• 前面的人可能要填单子、核对信息对应程序中的“IO 操作”比如下载文件、访问数据库哪怕他在填单子时窗口空闲你也不能上前•只有前一个人完全办完离开下一个人才能开始。 这就是同步编程的逻辑任务按顺序执行一个任务没完成尤其是等待 IO 时后面的任务必须“阻塞”等待直到当前任务结束。 用 Python 代码举个同步的例子模拟下载 3 张图片import time # 模拟下载图片IO操作用time.sleep模拟等待时间 def download_img(img_name): print(f开始下载{img_name}) time.sleep(2) # 模拟下载等待此时程序完全阻塞 print(f下载完成{img_name}) # 同步执行 start_time time.time() download_img(风景.jpg) download_img(人物.jpg) download_img(动物.jpg) end_time time.time() print(f总耗时{end_time - start_time:.2f}秒)很明显3 个任务依次执行总耗时是单个任务的 3 倍——这就是同步的“低效”之处等待 IO 时程序完全闲着2. 异步“多件事穿插做不等完也能切换”还是刚才的银行场景但这次你多了个“助手”对应 Python 的“事件循环”你去窗口提交申请后工作人员说“填完单子再来”对应程序发起 IO 请求你不用在窗口等而是去旁边填单子程序释放线程去处理其他任务同时助手帮你盯着窗口——等你填完单子IO 完成助手会提醒你“该你了”程序切换回原任务继续执行这样一来窗口和你都没闲着效率大大提升。这就是异步编程的逻辑任务发起后如果需要等待 IO比如下载、数据库查询程序不会阻塞而是去执行其他任务等 IO 完成后再回来继续处理之前的任务。注意异步不是“同时执行多个任务”那是多线程/多进程而是“在等待的间隙穿插执行其他任务”——本质是“单线程下的任务调度优化”。二、Python 异步的“三要素”你必须掌握的核心语法要在 Python 中写异步代码有三个核心概念必须掌握它们就像异步的“三驾马车” async/await 关键字、 asyncio 库、以及“可等待对象”。1. 关键字async def定义异步函数首先异步函数必须用 async def 定义而不是普通的 def ——这告诉 Python“这个函数是异步的里面可能有等待操作”。# 异步函数用async def定义 async def async_download_img(img_name): print(f开始下载{img_name}) # 这里不能用time.sleep同步等待必须用异步等待 await asyncio.sleep(2) # 异步等待释放线程去处理其他任务 print(f下载完成{img_name})注意普通函数里不能用 await只有 async def 定义的异步函数里才能用。2. 关键字await等待“可等待对象”await 的作用是“暂停当前异步函数去执行其他任务直到等待的对象完成”。它后面必须跟“可等待对象”比如异步函数、asyncio.Task 等。为什么不能用 time.sleep(2)因为 time.sleep 是同步等待会阻塞整个线程——而异步需要的是“异步等待”所以要用 asyncio.sleep(2)它是异步的会释放线程。3. 库asyncio 管理异步任务asyncio是 Python 标准库中专门用于异步编程的库它提供了“事件循环”相当于之前说的“助手”、任务调度、IO 管理等核心功能。最常用的方法是 asyncio.run()——它会创建一个事件循环运行异步函数然后关闭循环run 里面一般放入一个协程。import asyncio import time async def download_img(image_name): print(f开始下载图片:{image_name}) await asyncio.sleep(2) print(图片下载完成) async def main(): start_time time.time() await asyncio.gather( download_img(风景.jpg), download_img(人物.jpg), download_img(宠物.jpg) ) end_time time.time() print(f总耗时:{end_time - start_time}) if __name__ __main__: asyncio.run(main()) asyncio.run(download_img(电影.mp4))看到了吗总耗时从6 秒降到了 2 秒——这就是异步的魔力三个任务的“等待时间”重叠了三、同步 vs 异步什么时候该用哪个很多人会觉得“异步比同步好所有场景都该用异步”——这其实是误区。同步和异步各有适用场景选错了反而会适得其反。我们用一张表对比二者的核心差异和适用场景举个例子如果你写一个“计算 1 到 100000 的质数”的程序CPU 密集用异步没用——因为 CPU 一直在工作没有等待间隙异步无法切换任务如果你写一个“爬取 100 个网页”的程序IO 密集用异步就很合适——因为爬网页时大部分时间在等服务器响应异步可以在等待时爬其他网页四、常见误区异步不是“银弹”最后我们澄清几个关于 Python 异步的常见误区帮你避免踩坑1. 异步 ≠ 多线程/多进程异步是“单线程下的任务调度”而多线程/多进程是“真正的并行执行”。异步不能解决 CPU 密集型任务的效率问题因为它本质还是单线程。2. 不是所有库都支持异步很多 Python 库是同步的比如 requests 、 sqlite3 在异步函数里用这些库会阻塞线程——必须用对应的异步库比如 aiohttp 对应 requests 、 asyncpg 对应 psycopg2 。3. 异步代码不一定比同步快 如果任务量很小或者 IO 等待时间极短比如本地文件读写异步的“调度开销”可能比节省的等待时间还多反而更慢。 总结 回到开头的问题为什么有的 Python 程序效率低因为它用了同步逻辑处理 IO 密集型任务浪费了大量等待时间。同步和异步没有绝对的好坏关键是“对症”•当任务需要大量等待IO 密集用异步 async/await asyncio 让程序“不闲着”•当任务需要大量计算CPU 密集用同步 多线程/多进程让 CPU“不闲着”。异步就是不要让 cpu 闲下来

相关新闻

零基础上手 Dify:从环境搭建到第一个 RAG 知识库对话应用

零基础上手 Dify:从环境搭建到第一个 RAG 知识库对话应用

2026/7/31 3:21:31

前言 在大模型应用开发领域,很多新手会陷入两难困境:纯手写RAG需要掌握大量底层代码、向量数据库、分块算法等知识,入门门槛极高;而Coze等零代码平台闭源、无法私有化部署、不支持二次开发,无法用于企业项目与求职项目…

STM32 PWM驱动无源蜂鸣器播放音乐:从原理到《小星星》实战

STM32 PWM驱动无源蜂鸣器播放音乐:从原理到《小星星》实战

2026/7/31 3:21:31

1. 项目缘起:从“滴滴”声到“哆来咪”几年前,我接手一个智能家居的演示项目,客户要求在设备状态变化时,除了指示灯闪烁,还要有更人性化的声音提示。当时第一反应就是接个蜂鸣器,让它“滴滴”响。但转念一想…

STM32俄罗斯方块实战:MCU游戏开发与嵌入式系统设计

STM32俄罗斯方块实战:MCU游戏开发与嵌入式系统设计

2026/7/31 3:21:31

1. 项目概述:在MCU上重温经典俄罗斯方块,这个诞生于上世纪80年代的经典游戏,几乎刻在了每一位电子爱好者的DNA里。它规则简单,却蕴含着无穷的策略与乐趣。今天,我们不做PC版,也不做手机App,而是…

消息散列值签名技术:原理、实践与优化

消息散列值签名技术:原理、实践与优化

2026/7/31 6:21:39

1. 消息散列值签名技术解析消息散列值签名是现代密码学中确保数据完整性和身份认证的核心技术。简单来说,就是先对原始数据计算指纹(散列值),再用发送方的私钥对这个指纹进行加密处理。接收方用公钥解密后,通过比对散列…

科研必备:全球学术文献检索工具全攻略与高效工作流

科研必备:全球学术文献检索工具全攻略与高效工作流

2026/7/31 6:21:39

1. 引言:为什么你需要一个全球化的文献雷达?作为一名在科研一线摸爬滚打了十多年的“老博后”,我深知文献检索是学术研究的生命线。无论是刚入门的研究生,还是正在冲刺项目的资深学者,手里没几个好用的文献检索工具&am…

Win11Debloat终极指南:免费开源工具让你的Windows 11性能飙升51%

Win11Debloat终极指南:免费开源工具让你的Windows 11性能飙升51%

2026/7/31 6:21:39

Win11Debloat终极指南:免费开源工具让你的Windows 11性能飙升51% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declut…

5分钟搞定FanControl中文设置:Windows风扇控制的完整中文指南

5分钟搞定FanControl中文设置:Windows风扇控制的完整中文指南

2026/7/31 6:21:39

5分钟搞定FanControl中文设置:Windows风扇控制的完整中文指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tren…

企业微信第三方应用开发中的多租户隔离与权限管理模型

企业微信第三方应用开发中的多租户隔离与权限管理模型

2026/7/31 6:21:39

面向多企业提供 SaaS 服务的第三方应用开发者,必须妥善解决“多租户数据隔离”与“第三方应用授权(SuiteToken & AuthCorpId)”的复杂逻辑。核心概念区分服务商凭证(SuiteAccessTokne):第三方应用服务商…

img2threejs 架构深度解析:AI 如何高效地从图片“雕刻“3D 模型

img2threejs 架构深度解析:AI 如何高效地从图片“雕刻“3D 模型

2026/7/31 6:11:38

本文是 img2threejs 系列的第二篇,深入剖析其管线架构设计、质量门控机制、以及"确定性脚本 AI 视觉判断"的 Token 高效利用策略。前言 上一篇我们介绍了 img2threejs 的基本概念和使用方式。这篇文章我们深入它的内部架构——它是如何在保证模型质量的同…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/30 9:53:22

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/30 1:17:46

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/30 2:52:37

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

2026优质EMBA择校榜单:校友圈质量高的EMBA适配民企创始人

2026优质EMBA择校榜单:校友圈质量高的EMBA适配民企创始人

2026/7/31 0:01:23

【客观独立测评】深耕商科教育测评多年,聚焦民企创始人、科创企业实控人择校痛点,避开镀金空壳、课程脱节、圈层杂乱的踩坑问题,结合真实办学数据与学员口碑,整理出适配实业高管的高性价比EMBA榜单,理性分析各项目适配…

绝区零一条龙:5分钟快速上手的终极自动化助手

绝区零一条龙:5分钟快速上手的终极自动化助手

2026/7/31 0:01:23

绝区零一条龙:5分钟快速上手的终极自动化助手 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 绝区零一条龙是一…

2026民企老板EMBA择校榜单:人脉圈广的EMBA高性价比测评

2026民企老板EMBA择校榜单:人脉圈广的EMBA高性价比测评

2026/7/31 0:01:23

【客观中立测评声明】本文基于学费成本、课程落地、圈层纯度、长期赋能四大维度实测打分,无商业洗脑吹捧,仅为民企创始人、科创高管提供真实择校参考,规避镀金踩坑陷阱。不少民营企业家读EMBA容易踩两大坑:盲目追名校排名&#xf…