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

使用asyncio.gather实现Python异步字典推导遇RuntimeError求助

用asyncio.gather()实现异步字典推导的正确方式

问题原因

你代码报错的核心是未等待asyncio.gather()返回的Future对象完成,直接将其当作可迭代对象进行字典推导。asyncio.gather()返回的是一个Future实例,必须通过await获取其最终执行结果(所有协程返回值组成的列表),才能遍历生成字典。

修正后的代码

import asyncio


async def div7_tuple(x):
    return x, x/7


async def main():
    lost = [4, 8, 15, 16, 23, 42]
    # 先await获取gather的执行结果列表
    results = await asyncio.gather(*[div7_tuple(x) for x in lost])
    # 用结果列表生成目标字典
    print({k: v for k, v in results})


if __name__ == '__main__':
    asyncio.run(main())

关键说明

  1. asyncio.gather(*[div7_tuple(x) for x in lost])会把所有协程打包成一个Future对象,调用await后会等待所有协程并行执行完成,返回一个包含每个协程返回值的列表。
  2. 你之前的逐个await写法(main2)是串行执行协程,而用gather能实现并行,效率更高,这也是使用gather的核心优势。
  3. 运行修正后的代码会输出正确的字典:
    {4: 0.5714285714285714, 8: 1.1428571428571428, 15: 2.142857142857143, 16: 2.2857142857142856, 23: 3.2857142857142856, 42: 6.0}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:02:49