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)

相关推荐
侠客行03174 小时前
Mybatis连接池实现及池化模式
java·mybatis·源码阅读
蛇皮划水怪4 小时前
深入浅出LangChain4J
java·langchain·llm
子兮曰5 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
吴仰晖5 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神5 小时前
github发布pages的几种状态记录
前端
较劲男子汉6 小时前
CANN Runtime零拷贝传输技术源码实战 彻底打通Host与Device的数据传输壁垒
运维·服务器·数据库·cann
老毛肚6 小时前
MyBatis体系结构与工作原理 上篇
java·mybatis
wypywyp6 小时前
8. ubuntu 虚拟机 linux 服务器 TCP/IP 概念辨析
linux·服务器·ubuntu
风流倜傥唐伯虎7 小时前
Spring Boot Jar包生产级启停脚本
java·运维·spring boot
Doro再努力7 小时前
【Linux操作系统10】Makefile深度解析:从依赖推导到有效编译
android·linux·运维·服务器·编辑器·vim