You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PM2启动集成PaddleOCR的FastAPI项目陷入循环问题排查

问题分析与解决方案

核心原因

fastapi run main.py 本质是通过内置的Uvicorn服务器启动FastAPI应用,而直接执行 python main.py 只会运行脚本代码,但不会启动HTTP服务进程,脚本执行完毕后进程就会退出。PM2的默认行为是检测到进程退出就自动重启,这就导致了进程无限启停循环,PaddleOCR模型重复加载的日志正是每次重启初始化造成的。

解决方法

方法1:在代码中显式启动Uvicorn

修改你的main.py,在文件末尾添加Uvicorn启动逻辑:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"message": "Hello World"}

# 添加以下代码
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)  # 可根据需求修改host和port

之后用原来的PM2命令启动即可:

# 服务器端项目
pm2 start /root/validador_documental/main.py --interpreter /root/validador_documental/.venv/bin/python --name "validador_documental"

# Windows测试项目
pm2 start C:/Z_Trabalho/teste_fastapi/main.py --interpreter C:/Z_Trabalho/teste_fastapi/venv/scripts/python.exe --name teste

方法2:让PM2直接调用fastapi run命令

直接指定虚拟环境中的fastapi可执行文件,让PM2运行fastapi run启动命令:

# 服务器端项目
pm2 start "/root/validador_documental/.venv/bin/fastapi" --name "validador_documental" -- run main.py

如果需要更清晰的配置,可以创建ecosystem.config.js文件:

module.exports = {
  apps: [
    {
      name: "validador_documental",
      script: "/root/validador_documental/.venv/bin/fastapi",
      args: "run main.py",
      interpreter: "none",  // 无需额外解释器,fastapi本身是可执行文件
      cwd: "/root/validador_documental/"  // 指定项目根目录
    }
  ]
};

然后执行启动命令:

pm2 start ecosystem.config.js

验证

修改后,无论是集成PaddleOCR的项目还是基础Hello World项目,PM2启动的进程都会持续运行,不会再出现启停循环,PaddleOCR模型也只会加载一次。

内容的提问来源于stack exchange,提问作者diego alejandro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:45:06