python - 我可以在 Django 的哪个位置运行启动来加载数据?

标签 python django

我有一个 django 应用程序,它在 django 启动后将一个巨大的数组加载到内存中以进行进一步处理。

我现在做的是,在加载特定 View 后,我执行加载数组的代码如下:

try:
    load_model = load_model_func()
except:
    #Some exception
    

现在的代码很糟糕。我想在启动 django 后创建一个类来加载此模型一次,我希望能够在应用程序的所有其他方法中的所有其他此模型中获取此模型

那么,Django启动后加载数据到内存有什么好的做法吗?

最佳答案

@Ken4scholar 的回答在“Django 启动后加载数据的良好实践”方面是一个很好的回应。它并没有真正解决存储/访问它的问题。

如果除非您重新加载应用程序,否则您的数据不会过期/更改,那么按照评论中的建议使用缓存是多余的,并且根据您使用的缓存存储,您最终可能仍会从某些数据库中提取数据,从而产生开销。

您可以简单地将其存储在内存中,就像您已经在做的那样。向混合中添加一个额外的类不会真正添加任何东西,一个简单的全局变量就可以了。

考虑这样的事情:

# my_app/heavy_model.py
data = None

def load_model():
    global data
    data = load_your_expensive_model()

def get_data():
  if data is None:
      raise Exception("Expensive model not loaded")
  return data

在你的配置中(你可以 lean more about applications and config here ):

# my_app/app_config.py
from django.apps import AppConfig

from my_app.heavy_model import load_model

class MyAppConfig(AppConfig):
    # ...
    def ready(self):
        load_model()

然后您可以在 View 中直接调用 my_app.heavy_model.get_data

⚠️ 您也可以直接访问全局 data 变量,但是最好有一个围绕它的包装器(也可以防止您以后想围绕它创建更多抽象)。

关于python - 我可以在 Django 的哪个位置运行启动来加载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65023358/

相关文章:

python - MySQL 插入查询 - FLASK

python - 如何使用scipy.optimize同时最小化多个标量值函数

python - 如何在 Google AppEngine Python37 中获取凭据

Django 如何在 FileField 中打开文件

python - 在 subprocess.check_call 期间进程 stdout 或 stderr 重定向到文件

python - 为字符分配一个值以进行计算

python - 需要用ajax调用实现django-filter

django "duplicate key value violates unique constraint"主键

python - django-piston 够成熟吗?

python - 从 Django webapp 安全地执行 Go 脚本