当 Skill 需要同时等待多个耗时操作(如网络请求、文件 I/O)时,异步编程能大幅减少总等待时间。
本篇介绍 Python asyncio 在 Skill 脚本中的应用场景与写法。
同步 vs 异步:何时该用异步
异步不等于并行。Python 的 asyncio 是单线程的事件循环,适合 I/O 密集型任务(等待网络、磁盘)。CPU 密集型任务应使用 ProcessPoolExecutor。
ProcessPoolExecutor
异步发送多个 HTTP 请求
假设 Skill 需要同时调用 3 个 API 接口,同步方式总耗时是三次请求之和,异步方式总耗时约等于最慢的那一次。
实例
并发完成 3 个请求,总耗时 1.23 秒 (同步串行约需 3.5 秒,并发节省约 65% 时间)
异步读取多个文件
对于需要同时读取多个文件的场景,aiofiles 提供了文件 I/O 的异步版本。
超时控制与任务取消
异步任务中,超时控制尤为重要。asyncio.wait_for 可以为单个任务设置最大等待时间。
{ "快速任务": {"status": "ok", "result": "快速任务 完成"}, "慢速任务": {"status": "timeout", "message": "超过 2 秒未完成"} }
在 SKILL.md 中说明异步脚本的调用方式
## 并发 API 调用 当用户提供多个文本需要同时分析时,运行异步脚本以提升速度: ```bash python scripts/async_requests.py ``` 该脚本会并发发出所有请求,总耗时约等于最慢的单次请求, 而非所有请求的时间之和。