技术疑问: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
相关产品推荐
相关产品推荐

