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

Django开发服务器中如何仅加载一次PaddleOCR模型?

解决Django开发环境中PaddleOCR重复初始化的问题

Django开发服务器在DEBUG=True模式下,代码变动会触发进程热重载,这就是你每次改代码都要重新加载模型的原因。以下是两种可行的解决方案:

方案一:基于AppConfig+单例模式实现单次加载

这是推荐的方案,既能保留热重载的便利,又能确保模型只初始化一次。

  1. 创建工具模块封装模型初始化
    在你的应用目录下新建ocr_utils.py,用单例模式管理PaddleOCR实例:
from paddleocr import PaddleOCR

# 全局变量存储已初始化的模型
_ocr_instance = None

def get_ocr_instance():
    global _ocr_instance
    if _ocr_instance is None:
        # 这里填入你的PaddleOCR初始化配置
        _ocr_instance = PaddleOCR(use_angle_cls=True, lang='ch')
    return _ocr_instance
  1. 通过AppConfig在进程启动时预加载模型
    修改应用目录下的apps.py,利用ready方法在主进程启动时初始化模型,同时避免热重载时重复执行:
from django.apps import AppConfig
import os

class YourAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'your_app_name'  # 替换成你的应用名称

    def ready(self):
        # 仅在主进程执行初始化(热重载的子进程会跳过)
        if os.environ.get('RUN_MAIN') == 'true':
            from .ocr_utils import get_ocr_instance
            get_ocr_instance()
  1. 更新settings.py的INSTALLED_APPS
    将应用名称替换为上述AppConfig的路径,确保Django加载自定义配置:
INSTALLED_APPS = [
    # ... 其他应用
    'your_app_name.apps.YourAppConfig',  # 替换成实际路径
]

之后在视图或其他业务代码中,只需调用get_ocr_instance()就能拿到已初始化的模型,无需重复加载。

方案二:禁用开发服务器的热重载(不推荐)

如果上述方案无法生效,可以通过禁用热重载强制模型只加载一次:

python manage.py runserver --noreload

但此方法的缺点是代码改动后需要手动重启服务器才能生效,会降低开发效率。

为什么之前的方案失效?

  • settings.py初始化:Django热重载时会重新加载整个settings模块,导致其中的初始化代码重复执行。
  • 线程方案:Django开发服务器的热重载是重启整个进程,线程无法跨进程保留,因此线程方案无法解决问题。

内容的提问来源于stack exchange,提问作者Irfan Shaikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:27:07