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)

相关推荐
叫致寒吧2 小时前
Tomcat详解
java·tomcat
测试界的海飞丝5 小时前
10道软件测试面试题及其答案:
服务器·测试工具·职场和发展
skywalk81635 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
J***Q2925 小时前
Vue数据可视化
前端·vue.js·信息可视化
S***26756 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)6 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
@游子6 小时前
内网渗透笔记-Day5
运维·服务器
JIngJaneIL6 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
Yawesh_best7 小时前
告别系统壁垒!WSL+cpolar 让跨平台开发效率翻倍
运维·服务器·数据库·笔记·web安全
V***u4537 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言