在Spyder环境中无法执行FastAPI客户端代码该如何解决
报错原因
Spyder 内置的 IPython 运行环境默认会预先启动一个 asyncio 事件循环,而 uvicorn 启动服务时默认会调用 asyncio.run() 方法,该方法的底层逻辑禁止在已有运行状态的事件循环中重复执行,因此触发该报错。
解决方案
方案1:给事件循环打补丁适配嵌套调用
先安装依赖:pip install nest_asyncio然后在代码最开头添加补丁逻辑,修改后的完整代码如下:
import nest_asyncio nest_asyncio.apply() from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"} if __name__ == '__main__': uvicorn.run(app, port=8080, host='0.0.0.0')方案2:修改Spyder运行配置,脱离自带内核执行
打开Spyder顶部菜单栏「运行」→「配置每文件运行」,选中当前代码文件后,勾选「在外部系统终端中执行」,保存后重新运行即可。该方案会直接调用系统原生Python环境运行代码,不会复用Spyder内置的带事件循环的内核,从根源上避免冲突。
内容的提问来源于stack exchange,提问作者Micha Lemarenko
相关产品推荐
相关产品推荐

