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
相关产品推荐
相关产品推荐

