news 2026/5/15 16:17:11

Python_asyncio异步编程深度实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/15 16:17:11

掌握游戏流畅度:FPSLocker - 任天堂Switch帧率自定义终极指南

掌握游戏流畅度&#xff1a;FPSLocker - 任天堂Switch帧率自定义终极指南 【免费下载链接】FPSLocker Set custom FPS in Nintendo Switch games 项目地址: https://gitcode.com/gh_mirrors/fp/FPSLocker 你是否曾经在玩Switch游戏时&#xff0c;感觉帧率不够稳定&#…

作者头像 李华
网站建设 2026/5/15 16:16:05

TCP专栏-3.三次握手

什么是三次握手三次握手是指&#xff0c;在建立TCP连接时&#xff0c;客户端和服务端总共会发送三个数据包。只有三个数据包都发送成功后&#xff0c;TCP连接才会建立成功。否则&#xff0c;丢失任何一个包&#xff0c;都会导致连接建立失败。发送三个数据包的过程&#xff0c;…

作者头像 李华
网站建设 2026/5/15 16:13:48

PPTAgent终极指南:如何用AI在5分钟内创建专业演示文稿

PPTAgent终极指南&#xff1a;如何用AI在5分钟内创建专业演示文稿 【免费下载链接】PPTAgent An Agentic Framework for Reflective PowerPoint Generation 项目地址: https://gitcode.com/gh_mirrors/pp/PPTAgent PPTAgent是一个创新的AI演示文稿生成框架&#xff0c;能…

作者头像 李华
网站建设 2026/5/15 16:11:11

终极指南:3分钟掌握IDM激活脚本完整使用方法

终极指南&#xff1a;3分钟掌握IDM激活脚本完整使用方法 【免费下载链接】IDM-Activation-Script-ZH IDM激活脚本汉化版 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script-ZH 还在为Internet Download Manager&#xff08;IDM&#xff09;的30天试用…

作者头像 李华
网站建设 2026/5/15 16:10:03

免费AI文生视频平台(长视频)-更新

先附上网站地址:www.pyaitool.cn 备用网址:http://pyaitool.cn:8081 完全免费&#xff0c;完全免费。登录密码:admin 更新了界面和功能&#xff0c;夏天到了&#xff0c;就来点夏日元素&#xff0c;界面AI改的&#xff0c;后端AI做的&#xff0c;前端AI做的。属于是提示词工程。…

作者头像 李华
网站建设 2026/5/15 16:06:33

从引脚到协议:Microchip SAM D51与LAN9253 EtherCAT从站硬件设计全解析

1. 芯片选型与核心架构解析 第一次接触工业以太网从站设计时&#xff0c;面对琳琅满目的芯片型号确实容易犯选择困难症。经过多个项目的实战验证&#xff0c;我发现Microchip SAM D51与LAN9253的组合堪称黄金搭档。SAM D51作为Cortex-M4F内核的MCU&#xff0c;主频120MHz的性能…

作者头像 李华