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

Python async函数如何返回值?Spyder运行async代码出现Task pending报错

问题原因

  • 你调用asyncio.create_task(main())仅将协程封装为任务提交到事件循环,没有等待任务执行完毕,此时直接打印拿到的是处于运行状态的任务对象,而非函数返回值,因此会显示Task pending提示。
  • Spyder的IPython内核默认已经启动了一个事件循环,asyncio.run()的逻辑是创建并运行新的事件循环,因此会和现有循环冲突无法运行。

解决方法

用当前现有事件循环的run_until_complete方法等待协程执行完成并获取返回值,修改你的主程序入口代码即可:

if __name__ == "__main__":
    # 获取当前线程已存在的事件循环
    loop = asyncio.get_event_loop()
    # 等待协程执行完毕并拿到返回值
    data = loop.run_until_complete(main())
    print(data)

补充说明

  • 该写法完全兼容Python 3.8.3版本,无版本兼容问题。
  • 如果你使用的是较新版本Spyder,也可以先执行魔法命令%asyncio auto开启异步任务自动等待,后续直接写await main()即可拿到返回值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:00:01