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)

相关推荐
無限進步D1 小时前
Java 运行原理
java·开发语言·入门
難釋懷1 小时前
安装Canal
java
是苏浙1 小时前
JDK17新增特性
java·开发语言
余人于RenYu2 小时前
Claude + Figma MCP
前端·ui·ai·figma
SPC的存折3 小时前
1、Redis数据库基础
linux·运维·服务器·数据库·redis·缓存
爱学习的小囧4 小时前
VMware ESXi 6.7U3v 新版特性、驱动集成教程和资源包、部署教程及高频问答详情
运维·服务器·虚拟化·esxi6.7·esxi蟹卡驱动
小疙瘩4 小时前
只是记录自己发布若依分离系统到linux过程中遇到的问题
linux·运维·服务器
dldw7775 小时前
IE无法正常登录windows2000server的FTP服务器
运维·服务器·网络
阿里加多5 小时前
第 4 章:Go 线程模型——GMP 深度解析
java·开发语言·后端·golang
杨艺韬5 小时前
vite内核解析-第2章 架构总览
前端·vite