我有一个 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/