news 2026/5/1 10: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/5/1 7:18:42

终极免费AI聚合阅读器:FeedMe让你的信息获取效率翻倍

终极免费AI聚合阅读器:FeedMe让你的信息获取效率翻倍 【免费下载链接】feedme 实时聚合 Hacker News/Github Trending/Higging Face Daily Papers 等平台信息,AI 生成中文摘要 项目地址: https://gitcode.com/gh_mirrors/feedme1/feedme 在信息过…

作者头像 李华
网站建设 2026/5/1 9:55:48

如何在ms-swift中实现循环经济模式创新?

如何在 ms-swift 中实现 AI 模型的可持续研发循环? 在大模型技术飞速演进的今天,企业与研究团队面临的已不再是“有没有模型可用”,而是“如何快速、低成本地把一个基座模型变成真正能落地的产品”。我们常常看到这样的场景:一个团…

作者头像 李华
网站建设 2026/5/1 9:31:41

Space Shooter:用C语言打造的跨平台太空射击游戏

Space Shooter:用C语言打造的跨平台太空射击游戏 【免费下载链接】space-shooter.c A cross-platform, top-down 2D space shooter written in C using only platform libraries. 项目地址: https://gitcode.com/gh_mirrors/sp/space-shooter.c 在浩瀚的代码…

作者头像 李华
网站建设 2026/4/25 0:46:43

ACME协议革命:acme-tiny如何重新定义自动化证书管理

ACME协议革命:acme-tiny如何重新定义自动化证书管理 【免费下载链接】acme-tiny A tiny script to issue and renew TLS certs from Lets Encrypt 项目地址: https://gitcode.com/gh_mirrors/ac/acme-tiny 在数字化安全日益重要的今天,ACME协议的…

作者头像 李华
网站建设 2026/5/1 8:44:37

Qwen3-Coder 30B:256K长文本AI编码提速新引擎!

Qwen3-Coder 30B:256K长文本AI编码提速新引擎! 【免费下载链接】Qwen3-Coder-30B-A3B-Instruct-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-Coder-30B-A3B-Instruct-GGUF 导语:Qwen3-Coder 30B-A3B-Instruct正…

作者头像 李华