You need to enable JavaScript to run this app. Django应用中应在何处加载Tensorflow模型以设置全局可用变量
优惠活动
大模型
产品
解决方案
定价
更多

Django应用中应在何处加载Tensorflow模型以设置全局可用变量

Django 全局加载TensorFlow模型方案说明

当前方案的有效性

你在views.py所有函数外部加载模型的方案是可以正常运行的:Django启动时会导入一次views.py模块,模块顶层的代码仅会在首次导入时执行一次,后续请求调用视图函数不会重复触发模型加载,功能层面没有问题。

更符合Django规范的实现方案

如果需要更优雅、更贴合Django应用生命周期的实现,推荐把模型加载逻辑放到Django应用的ready()钩子中执行,方便统一管理全局初始化资源:

实现步骤

  • 重写应用配置的ready()方法加载模型
    在应用的apps.py文件中添加如下代码:
from django.apps import AppConfig
import tensorflow as tf

class 你的应用名Config(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = '你的应用名'
    # 存储预加载的模型
    tf_model = None

    def ready(self):
        # 避免runserver自动重载机制触发重复加载
        import os
        if os.environ.get('RUN_MAIN') != 'true':
            return
        # 替换为你的模型存储路径完成加载
        self.tf_model = tf.keras.models.load_model('你的模型文件路径.h5')
  • 在视图中调用预加载的模型
    在views.py中直接从应用配置获取已加载的模型即可:
from django.apps import apps
from django.http import JsonResponse

def 你的预测视图(request):
    # 获取预加载的模型
    model = apps.get_app_config('你的应用名').tf_model
    # 执行预测逻辑
    # prediction_result = model.predict(你的输入数据)
    return JsonResponse({"result": "预测完成"})

注意事项

  • 若使用多worker部署(如Gunicorn、uWSGI启动多个工作进程),每个worker进程会独立加载一次模型,属于多进程架构的正常表现,不会影响功能
  • 禁止在视图函数内部加载模型,否则每次请求都会触发模型IO操作,会严重降低接口响应速度
  • 本地开发环境下runserver默认会启动重载进程,ready()方法中的RUN_MAIN判断可以避免重载进程重复加载无用的模型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 18:03:00