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

关于Python asyncio.gather中_GatheringFuture结果设置主体的疑问

关于asyncio.gather中_GatheringFuture的结果设置逻辑

你观察到的没错,asyncio.gather返回的_GatheringFuture本身确实没有直接调用set_result()或set_exception()的逻辑,但它的结果/异常是通过子任务的回调机制来触发设置的,具体流程如下:

  1. 当调用asyncio.gather(func(1), func(2))时,gather内部会先把传入的协程(或Future/Task)统一包装成可调度的Task实例(如果还不是的话),这些就是源码里的children子任务。
  2. 创建_GatheringFuture实例后,gather会给每个子任务添加done_callback(对应源码中的_complete_future函数)。这个回调的作用是:每当一个子任务完成(无论正常返回还是抛出异常),就更新_GatheringFuture内部的结果收集状态。
  3. 当所有子任务都完成后,回调会根据收集到的结果(或异常,取决于return_exceptions参数),主动调用_GatheringFuture的set_result()或set_exception()方法:
    • 若所有子任务正常完成,就把收集到的结果列表传入set_result(),这就是你await时拿到的[1, 2];
    • 若有子任务抛出异常且return_exceptions为False,就会把第一个异常传入set_exception(),触发await时的异常捕获。

简言之,_GatheringFuture是一个“协调者”角色,它不自行执行任务,而是监听所有子任务的完成事件,等全部子任务结束后,由绑定的回调函数帮它完成结果或异常的设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:41:03