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

Python asyncio运行时报future属于不同事件循环的ValueError如何解决?

问题根因
  • 遍历accounts的循环内每次迭代都新建了独立的事件循环实例,asyncio.ensure_future创建的任务会自动绑定到当前上下文的事件循环,也就是说你tasks列表里的每个任务分别属于不同的事件循环实例。
  • 最终你调用run_until_complete用的是最后一次迭代生成的事件循环,它只能运行绑定到自身的任务,其他任务归属的循环和当前运行的循环不匹配,因此抛出ValueError。
修复方案

将事件循环的初始化逻辑移到for循环外部,确保所有任务都绑定到同一个事件循环实例即可,修复后代码如下:

# 提前初始化唯一的事件循环,放在for循环外
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

for account_item in accounts:
    account_obj_map[account_item.id] = account_item
    balance_params = {"account-id": account_item.id}
    balance_request = GetBalanceService(balance_params).get_request(**self.__kwargs)
    balance_url = server_url + balance_request.url
    tasks.append(asyncio.ensure_future(
        self.async_get_account_balance(balance_url,account_item.id,account_balance_json_map)))

# 直接用提前创建的循环运行所有任务
loop.run_until_complete(asyncio.wait(tasks))
补充说明
  • 如果你使用的是Python 3.7及以上版本,可以用asyncio.create_task()替代asyncio.ensure_future(),功能完全一致,可读性更强。
  • 任务运行结束后如果不需要保留循环,可以调用loop.close()释放资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:27:03