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

Python_asyncio异步编程深度实战

Python asyncio 异步编程深度实战:从原理到高性能并发模式

作者:Crown_22| AI Agent & 自动化工作流开发者 | 技术分享

前言

异步编程是 Python 开发者必须掌握的技能,尤其是在构建 AI Agent、Web 服务、爬虫系统时。但很多开发者对 asyncio 的理解停留在async/await语法层面,对其底层原理和高级用法知之甚少。

我在实际项目中用 asyncio 构建过多个高并发系统,踩过无数坑。今天把经验分享出来,帮你真正掌握 Python 异步编程。


一、为什么需要异步?

1.1 同步的痛点

importtimeimportrequestsdeffetch_urls(urls):"""同步方式抓取多个URL"""results=[]forurlinurls:response=requests.get(url)# 阻塞等待results.append(response.text)returnresults# 抓取10个URL,每个耗时1秒,总共需要10秒urls=[f"https://httpbin.org/delay/1"for_inrange(10)]start=time.time()results=fetch_urls(urls)print(f"同步耗时:{time.time()-start:.2f}秒")# ~10秒

1.2 异步的优势

importasyncioimportaiohttpimporttimeasyncdeffetch_urls_async(urls):"""异步方式抓取多个URL"""asyncwithaiohttp.ClientSession()assession:tasks=[session.get(url)forurlinurls]responses=awaitasyncio.gather(*tasks)return[awaitr.text()forrinresponses]# 抓取10个URL,总共只需~1秒urls=[f"https://httpbin.org/delay/1"for_inrange(10)]start=time.time()results=asyncio.run(fetch_urls_async(urls))print(f"异步耗时:{time.time()-start:.2f}秒")# ~1秒

核心区别:同步是串行等待,异步是并发执行。


二、asyncio 核心概念

2.1 协程(Coroutine)

# 定义协程asyncdefhello():print("Hello")awaitasyncio.sleep(1)# 挂起,让出控制权print("World")# 调用协程返回协程对象(不会立即执行)coro=hello()print(type(coro))# <class 'coroutine'># 执行协程asyncio.run(hello())

2.2 事件循环(Event Loop)

importasyncioasyncdeftask(name,delay):print(f"任务{name}开始")awaitasyncio.sleep(delay)print(f"任务{name}完成")returnf"{name}的结果"asyncdefmain():# 创建多个任务tasks=[asyncio.create_task(task("A",2)),asyncio.create_task(task("B",1)),asyncio.create_task(task("C",3))]# 等待所有任务完成results=awaitasyncio.gather(*tasks)print(f"结果:{results}")asyncio.run(main())

2.3 Task vs Future

asyncdefdemo():# Task 是 Future 的子类task=asyncio.create_task(some_coroutine())# 可以取消task.cancel()# 可以等待result=awaittask# 可以添加回调task.add_done_callback(lambdat:print(f"完成:{t.result()}"))

三、高级并发模式

3.1 Semaphore 信号量控制并发数

importasyncioimportaiohttpasyncdeffetch_with_limit(urls,max_concurrent=5):"""限制并发数的异步抓取"""semaphore=asyncio.Semaphore(max_concurrent
http://www.jsqmd.com/news/822732/

相关文章:

  • 036、PCIE配置空间类型0与类型1:一次设备枚举失败的排查手记
  • 不争而胜:贾子竞争哲学的范式革命与终极法则
  • 6%AFFF水成膜泡沫灭火剂厂家推荐:浙江金瑞恒,卓越耐低温性能适配极端环境 - 品牌速递
  • AI编程助手背后的光标控制平面:语义化编辑的核心架构
  • Pytorch图像去噪实战(九十四):自动重训流水线,从反馈样本到新模型一键生成
  • 告别重复操作:M9A如何用智能自动化重塑《重返未来:1999》游戏体验
  • 告别命令行:实战ENSP Web界面配置防火墙与无线控制器
  • 主流LLM拓扑病理研究:形质混杂缺陷与二维扁平化智能存在的物理先天局限(世毫九实验室原创研究)
  • ARP协议深度解析:从原理到实战构建离线在线网络探测工具
  • 【大模型时代】产品经理为何必须学习大模型?产品经理必学!掌握大模型
  • 5G NR物理层实战:从帧结构参数到TB块生成的完整计算解析
  • 信号处理中的‘双子星’:深入对比周期信号的离散谱与非周期信号的连续谱(附Sinc函数详解)
  • 天津除甲醛公司及深度观察:直营服务如何应对北方供暖季挑战 - 博客湾
  • 农业AI智能体平台AgC:架构设计与核心技术解析
  • 基于Ansible与Docker的自动化家庭实验室构建指南
  • 2026无人机电力巡检公司盘点:按预算档怎么选 - 速递信息
  • 相机画幅对比
  • 2026年跨境POD定制系统选购指南:享定就定等主流方案深度对比 - 速递信息
  • 6%AFFF/AR抗溶性水成膜消防泡沫液厂家推荐:浙江金瑞恒,无惧极性溶剂挑战的灭火专家 - 品牌速递
  • 在多模型聚合平台Taotoken上如何进行高效的模型选型
  • HoRNDIS:Mac电脑通过Android手机USB共享上网的终极解决方案
  • 羽毛球单打战术
  • 射频高手到底强在哪里?尤其做5G,真正拼的是这套底层功夫
  • 新鲜出炉!2026银杏树培育基地推荐排行 高成活/全规格/一站式绿化服务 - 极欧测评
  • X3 PI双风扇散热外壳设计:从风道原理到3D打印实践
  • BilibiliDown:跨平台B站视频下载工具完全指南
  • 2026年DevOps平台选型推荐:聚焦国产化适配与效能提升的关键考量
  • 从拆解到信号放大:探索压电陶瓷传感器的核心特性与应用
  • 终极指南:MTK设备安全绕过技术深度解析与实战应用
  • 掌握游戏流畅度:FPSLocker - 任天堂Switch帧率自定义终极指南