news 2026/4/8 18:02:56

Python asyncio 完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python asyncio 完全指南

Python asyncio 核心概念

asyncio 是 Python 用于编写并发代码的库,基于协程(coroutines)和事件循环(event loop)。核心对象包括:

  • 协程(Coroutine):通过async def定义的函数,使用await挂起执行。
  • 事件循环(Event Loop):调度协程的执行,管理异步任务。
  • Future/TaskFuture表示异步操作的最终结果,TaskFuture的子类,用于包装协程。

基础用法

定义协程并运行:

import asyncio async def hello(): print("Hello") await asyncio.sleep(1) print("World") asyncio.run(hello()) # 启动事件循环

关键点:

  • asyncio.run()是 Python 3.7+ 的入口函数,负责创建和关闭事件循环。
  • await用于挂起协程,直到异步操作完成(如 I/O 或睡眠)。

任务并发管理

通过create_taskgather实现并发:

async def task1(): await asyncio.sleep(2) return "Task 1" async def task2(): await asyncio.sleep(1) return "Task 2" async def main(): # 方式1:create_task t1 = asyncio.create_task(task1()) t2 = asyncio.create_task(task2()) result1, result2 = await t1, await t2 print(result1, result2) # 方式2:gather results = await asyncio.gather(task1(), task2()) print(results) asyncio.run(main())

异步 I/O 操作

与网络请求库(如aiohttp)结合示例:

import aiohttp async def fetch(url): async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.text() async def main(): html = await fetch("https://example.com") print(html[:100]) asyncio.run(main())

高级特性

  1. 超时控制
async def long_running_task(): await asyncio.sleep(10) return "Done" async def main(): try: result = await asyncio.wait_for(long_running_task(), timeout=2.0) except asyncio.TimeoutError: print("Timeout!")
  1. 队列(Queue):生产者-消费者模式:
async def producer(queue): for i in range(5): await queue.put(i) await asyncio.sleep(0.5) async def consumer(queue): while True: item = await queue.get() print(f"Consumed: {item}") queue.task_done() async def main(): queue = asyncio.Queue() await asyncio.gather(producer(queue), consumer(queue)) asyncio.run(main())

https://www.zhihu.com/zvideo/1992081414515102207/
https://www.zhihu.com/zvideo/1992081414288601523/
https://www.zhihu.com/zvideo/1992081411776209412/
https://www.zhihu.com/zvideo/1992081410983490058/
https://www.zhihu.com/zvideo/1992081411017031867/
https://www.zhihu.com/zvideo/1992081409662277143/
https://www.zhihu.com/zvideo/1992081408554997536/
https://www.zhihu.com/zvideo/1992081408483680838/
https://www.zhihu.com/zvideo/1992081406529122697/
https://www.zhihu.com/zvideo/1992081404582978832/
https://www.zhihu.com/zvideo/1992081404620722919/
https://www.zhihu.com/zvideo/1992081402775232642/
https://www.zhihu.com/zvideo/1992081401672139800/
https://www.zhihu.com/zvideo/1992081400329937526/
https://www.zhihu.com/zvideo/1992081399889536407/
https://www.zhihu.com/zvideo/1992081399407215761/
https://www.zhihu.com/zvideo/1992081399839216979/
https://www.zhihu.com/zvideo/1992081399583363803/
https://www.zhihu.com/zvideo/1992081398673208186/
https://www.zhihu.com/zvideo/1992081396286637136/
https://www.zhihu.com/zvideo/1992081394579567804/
https://www.zhihu.com/zvideo/1992081391882612845/
https://www.zhihu.com/zvideo/1992081388866933064/
https://www.zhihu.com/zvideo/1992081390523666922/
https://www.zhihu.com/zvideo/1992081389093427180/
https://www.zhihu.com/zvideo/1992081387851896032/
https://www.zhihu.com/zvideo/1992081387629610814/
https://www.zhihu.com/zvideo/1992081384467109570/
https://www.zhihu.com/zvideo/1992081384504842236/
https://www.zhihu.com/zvideo/1992081382793577889/
https://www.zhihu.com/zvideo/1992081381245866102/
https://www.zhihu.com/zvideo/1992081381375882005/
https://www.zhihu.com/zvideo/1992081380553810780/
https://www.zhihu.com/zvideo/1992081377668133201/
https://www.zhihu.com/zvideo/1992081376422430064/
https://www.zhihu.com/zvideo/1992081374388183350/
https://www.zhihu.com/zvideo/1992081375550010031/
https://www.zhihu.com/zvideo/1992081372085511626/
https://www.zhihu.com/zvideo/1992081369992552985/
https://www.zhihu.com/zvideo/1992081367652127214/
https://www.zhihu.com/zvideo/1992081365609494478/
https://www.zhihu.com/zvideo/1992081364208600440/
https://www.zhihu.com/zvideo/1992081362677699552/
https://www.zhihu.com/zvideo/1992081359297074283/
https://www.zhihu.com/zvideo/1992081358445630208/
https://www.zhihu.com/zvideo/1992081356218467656/
https://www.zhihu.com/zvideo/1992081354221966628/
https://www.zhihu.com/zvideo/1992081354599465668/
https://www.zhihu.com/zvideo/1992081334290633508/
https://www.zhihu.com/zvideo/1992081333414020001/
https://www.zhihu.com/zvideo/1992081332537426047/
https://www.zhihu.com/zvideo/1992081333263024630/
https://www.zhihu.com/zvideo/1992081329756590187/
https://www.zhihu.com/zvideo/1992081329752413320/

调试与错误处理

  • 启用调试模式:设置环境变量PYTHONASYNCIODEBUG=1
  • 捕获异常:协程内使用try/except,或通过Task.exception()检查任务异常。

性能优化建议

  • 避免阻塞操作(如同步 I/O),使用异步兼容库(如aiofiles替代文件操作)。
  • 限制并发量:通过信号量(asyncio.Semaphore)控制资源使用。

兼容性说明

  • Python 3.7+ 推荐使用asyncio.run(),旧版本需手动管理事件循环。
  • 与多线程/多进程交互时,使用asyncio.to_thread()loop.run_in_executor()

通过以上方法,可以高效利用 asyncio 构建高性能异步应用。

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

Ray-MMD终极完整教程:从零开始掌握3D动画渲染

Ray-MMD终极完整教程:从零开始掌握3D动画渲染 【免费下载链接】ray-mmd 🎨 The project is designed to create a physically-based rendering at mikumikudance. 项目地址: https://gitcode.com/gh_mirrors/ra/ray-mmd Ray-MMD是一个强大的开源渲…

作者头像 李华
网站建设 2026/4/4 2:54:17

I2C开发板实操教程:基于STM32的入门应用

手把手教你玩转STM32上的I2C通信:从协议到实战,零死角解析你有没有遇到过这样的场景?接好了一个温湿度传感器,代码也写了,可就是读不出数据——要么全是0xFF,要么总线直接“锁死”。反复检查线路、地址、上…

作者头像 李华
网站建设 2026/4/4 0:33:05

Kimi-VL-Thinking:2.8B参数如何玩转多模态推理?

Kimi-VL-Thinking:2.8B参数如何玩转多模态推理? 【免费下载链接】Kimi-VL-A3B-Thinking 项目地址: https://ai.gitcode.com/MoonshotAI/Kimi-VL-A3B-Thinking 国内AI团队Moonshot AI推出最新开源多模态模型Kimi-VL-A3B-Thinking,以仅…

作者头像 李华
网站建设 2026/3/31 1:37:13

如何快速掌握Crypto++:现代密码学实战的完整指南

如何快速掌握Crypto:现代密码学实战的完整指南 【免费下载链接】cryptopp free C class library of cryptographic schemes 项目地址: https://gitcode.com/gh_mirrors/cr/cryptopp 在当今数字化时代,数据安全已成为每个开发者的必备技能。Crypto…

作者头像 李华
网站建设 2026/4/4 15:48:11

RootHide越狱工具新手完整使用指南:从安装到应用全流程解析

RootHide越狱工具新手完整使用指南:从安装到应用全流程解析 【免费下载链接】Dopamine-roothide roothide Dopamine 1.x for ios15.0~15.4.1, A12~A15,M1 Devices. and roothide Dopamine 2.x is at: https://github.com/roothide/Dopamine2-roothide 项目地址: h…

作者头像 李华
网站建设 2026/4/5 2:36:47

.NET运行时方法修补完整指南:Harmony库深度解析

.NET运行时方法修补完整指南:Harmony库深度解析 【免费下载链接】Harmony A library for patching, replacing and decorating .NET and Mono methods during runtime 项目地址: https://gitcode.com/gh_mirrors/ha/Harmony Harmony是一个专为.NET和Mono平台…

作者头像 李华