Async / Concurrent
异步并发Python 里用 asyncio 并发调多个 API,不要串行等。
详解
异步并发是指用 Python asyncio 同时发起多个 LLM API 调用,让它们在等待响应时互不阻塞,而不是一个接一个地串行等待。串行调用 N 个请求的总耗时 ≈ N × 单次延迟;并发调用的总耗时 ≈ 最慢那次的延迟,时间节省极为显著。核心工具是 asyncio.gather(),把多个协程同时提交,等全部完成后返回结果列表。生产环境中还需配合 asyncio.Semaphore 限制最大并发数,防止同时打出几百个请求触发限流。Anthropic SDK 提供了 AsyncAnthropic 客户端,在 async def 函数里用法与同步版本几乎完全一致,只需在调用前加 await。适用场景:批量评估、多文档并行摘要、同一问题调用多模型对比。
一个类比
串行就像一个收银台只有一个收银员,顾客一个一个结账,前面的人刷卡慢你只能干等。并发就像同时开 5 个收银台,5 个顾客同时刷卡,总时间只取决于最慢那个人,而不是 5 个人加起来。信号量(Semaphore)就是超市规定最多开几个收银台——不能因为人多就无限开台,那样收银员(API 配额)会崩溃。
举个例子
import asyncio
import anthropic
client = anthropic.AsyncAnthropic()
async def summarize(text: str, sem: asyncio.Semaphore) -> str:
async with sem: # 最多 3 个并发请求
resp = await client.messages.create(
model="claude-sonnet-4-6",
max_tokens=128,
messages=[{"role": "user", "content": f"一句话总结:{text}"}]
)
return resp.content[0].text
async def main():
docs = ["量子计算简介...", "机器学习基础...", "区块链原理...",
"大数据分析...", "云计算架构..."]
sem = asyncio.Semaphore(3) # 并发上限 3
results = await asyncio.gather(*[summarize(d, sem) for d in docs])
for doc, summary in zip(docs, results):
print(f"{doc[:10]}... → {summary}")
asyncio.run(main())PYTHON 示例
相关概念
- → Parallel Tool Calls· 并行工具调用