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)

相关推荐
yangmu32033 小时前
Unity 开发过程与底层原理
java·开发语言
lexiangqicheng3 小时前
自定义表单跨端共用机制-PC设计APP渲染
java·前端·javascript
guo_wen_qiang3 小时前
云服务器redis主从复制-哨兵模式
运维·服务器·redis
zhikouai4 小时前
AI辅助逆向工程链路:从二进制接入到等价性校验
java·linux·前端
沙漏无语4 小时前
pnpm 安装@vue-office包的幽灵依赖问题解决
前端·javascript·vue.js
霍格沃兹测试学院-小舟畅学4 小时前
Playwright MCP:AI Agent 驱动 Web 自动化测试的架构与执行机制
前端·人工智能·架构
可信时间戳4 小时前
原创作品如何做版权认证申请?先备材料,再挑路径
服务器·音视频·可信时间戳·权利卫士
Jmyd01234 小时前
VR全景线上展会制作流程技术解析:全景采集、点云重建与Web端渲染优化实战
前端·javascript·vr·三维数字化
北城笑笑4 小时前
Server 18 ,Nginx 双服务器 HTTP转HTTPS 代理实战( HTTP 地址换 HTTPS 域名 )
运维·服务器·前端·后端·nginx·http·https
程序员-Benothing4 小时前
Linux磁盘IO性能分析:iostat、iotop、fio实战
linux·运维·服务器