news 2026/4/17 14:11: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/17 21:16:15

SweetAlert for Bootstrap 终极使用指南:打造美观弹框体验

SweetAlert for Bootstrap 终极使用指南:打造美观弹框体验 【免费下载链接】bootstrap-sweetalert 项目地址: https://gitcode.com/gh_mirrors/bo/bootstrap-sweetalert 在现代Web开发中,优雅的弹框组件能够显著提升用户体验。SweetAlert for Bo…

作者头像 李华
网站建设 2026/4/18 4:01:04

AgenticSeek终极指南:打造完全离线的智能工作伙伴

AgenticSeek终极指南:打造完全离线的智能工作伙伴 【免费下载链接】agenticSeek A open, local Manus AI alternative. Powered with Deepseek R1. No APIs, no $456 monthly bills. Enjoy an AI agent that reason, code, and browse with no worries. 项目地址:…

作者头像 李华
网站建设 2026/4/18 4:00:03

Pyxelate像素艺术转换:三步打造复古8-bit风格图片

Pyxelate像素艺术转换:三步打造复古8-bit风格图片 【免费下载链接】pyxelate Python class that generates pixel art from images 项目地址: https://gitcode.com/gh_mirrors/py/pyxelate 想要将普通照片瞬间变成充满怀旧魅力的像素艺术作品吗?P…

作者头像 李华
网站建设 2026/4/17 20:06:39

kohya-ss/sd-scripts图像生成工具从入门到精通

kohya-ss/sd-scripts图像生成工具从入门到精通 【免费下载链接】sd-scripts 项目地址: https://gitcode.com/gh_mirrors/sd/sd-scripts kohya-ss/sd-scripts是一个功能强大的Stable Diffusion图像生成工具集,基于Diffusers库开发,为用户提供了丰…

作者头像 李华
网站建设 2026/4/10 16:16:36

终极解决方案:worker-timers如何突破浏览器定时器限制

终极解决方案:worker-timers如何突破浏览器定时器限制 【免费下载链接】worker-timers A replacement for setInterval() and setTimeout() which works in unfocused windows. 项目地址: https://gitcode.com/gh_mirrors/wo/worker-timers 在前端开发中&…

作者头像 李华
网站建设 2026/4/11 22:21:36

腾讯HunyuanVideo-I2V开源:AI静态图转720P视频教程

腾讯HunyuanVideo-I2V开源:AI静态图转720P视频教程 【免费下载链接】HunyuanVideo-I2V 腾讯推出的HunyuanVideo-I2V是一款开源的图像转视频生成框架,基于强大的HunyuanVideo技术,能够将静态图像转化为高质量动态视频。该框架采用先进的MLLM多…

作者头像 李华