异步编程与并发控制
原文:asyncio 异步
一句话
使用async/await语法实现高效异步I/O和并发编程
什么时候翻这页
- 需要实现Agent中的异步工具调用,避免阻塞主线程
- Agent需要同时处理多个API请求或数据库查询
- 开发需要长时间运行的后台任务,如定期检查工具更新
- 构建需要高并发处理的Agent服务端
核心概念
- 协程(Coroutine):使用 async/await 语法定义的函数,可以暂停执行并在之后恢复
- 事件循环(Event Loop):asyncio 的核心,负责运行协程和处理事件
- 任务(Task):对协程的封装,可以并发执行并跟踪其状态
- Future:表示异步操作最终结果的对象
- 传输(Transports):处理 I/O 操作的底层机制
- 协议(Protocols):定义传输如何工作的规则
怎么做
- 创建异步函数:
async def main():
print('Hello ...')
await asyncio.sleep(1)
print('... World!')
- 运行异步函数:
asyncio.run(main())
- 在 REPL 中使用 asyncio:
$ python -m asyncio
>>> import asyncio
>>> await asyncio.sleep(10, result='hello')
'hello'
- 并发执行多个任务:
async def task1():
await asyncio.sleep(1)
return "Task 1 done"
async def task2():
await asyncio.sleep(2)
return "Task 2 done"
async def main():
results = await asyncio.gather(task1(), task2())
print(results)
asyncio.run(main())
命令 / API 速查
| API | 描述 |
|---|---|
asyncio.run(main()) | 运行主协程 |
await asyncio.sleep(delay) | 异步休眠指定秒数 |
asyncio.create_task(coro) | 创建任务 |
asyncio.gather(*coros) | 并发执行多个协程 |
asyncio.Queue() | 异步队列 |
asyncio.Lock() | 异步锁 |
asyncio.Event() | 异步事件 |
与 Agent 开发的联系
- Agent 开发中常需要异步调用外部 API 或工具,asyncio 可实现非阻塞调用
- 当 Agent 需要同时处理多个用户请求时,asyncio 提供的高并发能力至关重要
- 在构建需要长时间运行的 Agent 服务时,asyncio 的任务管理和事件循环机制可确保系统稳定性
初学者易错点
- 忘记在异步函数中使用
await关键字 - 在异步函数中使用阻塞式 I/O 操作,导致事件循环阻塞
- 混用同步和异步代码,造成死锁或性能问题
- 忽略异常处理,导致异步任务中的错误未被捕获
- 不正确地管理任务生命周期,导致资源泄漏
相关词条
library-asyncio-tasks任务管理与调度library-asyncio-streams流式数据处理library-asyncio-queues异步队列与消息传递library-asyncio-synchronization异步同步原语library-asyncio-subprocess异步子进程管理