05 async 基础
2026/7/29 17:12:58 网站建设 项目流程

async 基础

同步与异步

同步的特点:一件事做完,才做下一件。等待时(比如等网络、等 API 响应),程序闲着干等,CPU 在空转。

异步的特点:遇到「要等」的操作时,先去做别的事,等结果好了再回来处理。适合 I/O 密集型任务(网络请求、读文件、调 LLM API)

关键字速查

关键字作用
async def定义协程函数(coroutine function)
await在 async 函数里等待另一个 async 操作完成
asyncio.run()在普通脚本里启动整个 async 程序(入口)

1. async def — 定义协程函数

asyncdeffetch_data():return"数据"

调用 fetch_data() 不会立刻执行函数体,而是返回一个协程对象(coroutine object)。

2. await — 等待协程完成

asyncdefmain():result=awaitfetch_data()# 等 fetch_data 跑完,拿到返回值print(result)

await 只能写在 async def 函数内部。

3. asyncio.run() — 程序入口

普通 .py 文件里没有「事件循环」,需要这样启动:

importasyncioasyncdefmain():...asyncio.run(main())# 创建事件循环,运行 main,结束后关闭

4. asyncio.gather — 并发

results=awaitasyncio.gather(task_a(),task_b(),task_c())# 或 tasks = [task_a(), task_b(), task_c()] ,# results = await asyncio.gather(*tasks)
  • 是 Python 的可迭代对象解包(unpacking)运算符。写在函数调用里时,会把列表/元组里的元素拆开,当作多个独立参数传进去。
要点说明
传入多个协程(注意是 fetch_url(“a”) 这种调用,不是函数名本身)
返回列表,按传入顺序对应各任务返回值
执行事件循环同时调度,在 await 等待处切换

5. 测量耗时:time.perf_counter()

对比顺序和并发,需要计时:

importtime start=time.perf_counter()# performance counter 的缩写,意思是 性能计数器# ... 执行任务 ...elapsed=time.perf_counter()-startprint(f"耗时:{elapsed:.2f}秒")

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询