FastApi项目启动失败 got an unexpected keyword argument ‘loop_factory‘

FastApi项目启动失败,

报错如下:ERROR - Failed to start server: _patch_asyncio.<locals>.run() got an unexpected keyword argument 'loop_factory'

分析原因:

PyCharm Debug 模式(pydevd)会对 asyncio 事件循环进行 monkey patch(即 _patch_asyncio),

而 uvicorn 新版本(>=0.30)使用了:

asyncio.run(self.serve(...), loop_factory=self.config.get_loop_factory())

但 PyCharm 的 _patch_asyncio.run() 版本 并不支持 loop_factory 参数,导致:

TypeError: got an unexpected keyword argument 'loop_factory'

而在 非 debug 模式 下,asyncio.run 是原生函数,没有被替换,自然不会报错。

这就是为什么普通启动没问题、debug 模式下就挂掉的原因。

解决办法:修改 uvicorn 启动方式,需要在 import uvicorn 前引入 import asyncio

源码如下,非debug模式下不会环境检测以及重启unicorn不会生效

--------------------------

✅ 修复 PyCharm Debug 模式下 asyncio 兼容性问题

--------------------------

import asyncio

if "_patch_asyncio" in asyncio.run.qualname:

logger.warning("检测到 PyCharm Debug 模式,正在修复 asyncio.run 兼容性问题...")

import asyncio.runners

asyncio.run = asyncio.runners.run # 强制还原原生 asyncio.run()

if name == "main":

import uvicorn

Determine reload setting

reload = args.reload if args.reload else False

try:

logger.info(f"Starting FICAgent API server on {args.host}:{args.port}")

✅ 注意:在 Debug 模式下不要启用多进程 workers,会与 pydevd 冲突

debug_mode = "_pydevd_bundle" in sys.modules

if debug_mode and args.workers > 1:

logger.warning("检测到 Debug 模式,多进程 worker 将被强制设置为 1")

args.workers = 1

uvicorn.run(

"src.server:app",

host=args.host,

port=args.port,

reload=reload,

log_level=os.getenv("LOGGING_LEVEL", "INFO").lower(),

workers=args.workers,

)

except Exception as e:

logger.error(f"Server startup failed: {e}", exc_info=True)

logger.error(f"Failed to start server: {str(e)}")

sys.exit(1)

相关推荐
考虑考虑6 小时前
Mybatis实现批量插入
java·后端·mybatis
咖啡八杯7 小时前
GoF设计模式——中介者模式
java·后端·spring·设计模式
青石路11 小时前
记一次多JDK版本问题的排查,一坑套一坑,差点没爬上来
java
kyriewen11 小时前
我手写了一个 EventEmitter,面试官追问了 6 个问题——第 4 个我没答上来
前端·javascript·面试
IT_陈寒12 小时前
Java的Date类又坑了我一次,改用时间戳真香
前端·人工智能·后端
小林攻城狮12 小时前
使用 Transport 节流解决 Vercel AI SDK 流式渲染卡死问题
前端·react.js
前端缘梦12 小时前
告别 TS 运行时类型漏洞!Zod 完整入门实战教程(前端 / 全栈必备)
前端·react.js·全栈
the_answer13 小时前
Webpack vs Vite 深度对比分析
前端·webpack
转转技术团队13 小时前
验证码识别实战:前端不写页面,改训模型了?
前端
MomentYY13 小时前
Temperature:AI 的“脑洞旋钮”
前端·llm·ai编程