You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术疑问:a,b = await get_a(), await get_b()与分开声明是否等价?是否并发?

异步代码中await执行逻辑说明

你写的这段代码:

a,b = await get_a(), await get_b()

完全不会并发执行,它和分开写的两行代码:

a = await get_a()
b = await get_b()

是完全等价的,本质都是串行执行两个await操作。

为什么不会并发?

Python在处理逗号分隔的赋值表达式时,会依次计算右侧的每个表达式:先执行await get_a(),等这个协程完全执行完毕拿到结果后,才会开始执行await get_b()。两个操作是按顺序等待,没有任何并发逻辑。

真正实现并发的写法

如果要让get_a()和get_b()并发执行,必须先创建协程对象(不立即await),再通过asyncio.gather()这类方法同时等待它们完成,比如:

import asyncio

async def main():
    task_a = get_a()  # 创建协程对象,不立即执行
    task_b = get_b()
    a, b = await asyncio.gather(task_a, task_b)  # 同时等待两个协程完成

这样两个协程才会在事件循环中同时运行,实现真正的并发。

内容的提问来源于stack exchange,提问作者AncientArtOfDesign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 14:55:20