当前位置: 首页 > news >正文

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)

http://www.dtcms.com/a/449485.html

相关文章:

  • 杭州有专业做网站的吗用.net做购物网站
  • 什么是 mesh 组网
  • 网站建设什么行业创建个人网站教案
  • 十五、深入理解 SELinux
  • 10.6作业
  • 《投资-70》投资、投机、赌博的比较,一个靠企业内在的价值增值、一个靠市场的价格波动、一个全靠随机性的运气。
  • 前端知识详解——HTML/CSS/Javascript/ES5+/Typescript篇/算法篇
  • 【MySQL】 索引特性详解
  • FreeRTOS实现微秒级时间同步(基于1588V2)
  • 网站基本要素网站建设 主要学是么
  • Java包的命名,常见的包类,如何导入包
  • 滑动窗口题目:替换后的最长重复字符
  • 谷歌seo建站成都不能去的建筑设计公司
  • 贵阳网站制作企业陕西省建设网三类人员证书打印
  • 【小沐学WebGIS】基于Three.JS绘制飞行轨迹Flight Tracker(Three.JS/ vue / react / WebGL)
  • 告别 v-model 焦虑:在 React 中优雅地处理『双向绑定』
  • vue生态都有哪些?
  • C++之类与对象
  • 东莞长安做网站wordpress创意主题店铺
  • 百度地图收藏地址提取与格式转换工具 说明文档
  • 操作系统应用开发(二十三)RustDesk ng反向代理—东方仙盟筑基期
  • 河北省建设厅网站查询中心郑州建站系统费用
  • 分布式系统设计模式:从理论到实践
  • 新零售升维体验商业模式创新研究:基于开源AI大模型、AI智能名片与S2B2C商城小程序的融合实践
  • 【Linux】系统部分——线程安全与线程的单例模式
  • 关键词查询爱站网石家庄新闻头条新闻最新今天
  • HarmonyOS 应用开发深度解析:ArkTS 语法精要与现代化状态管理实践
  • wordpress站点图片多大合适做房产网站不备案可以吗
  • 【深入理解计算机网络04】通信基础核心知识全解析:从信号原理到物理层设备
  • 探索大语言模型(LLM):一文读懂通用大模型的定义、特点与分类