如何在每个时间段后重新加载在settings.py(Django)中定义的一些常量?

时间:2018-07-13 11:05:13

标签: django

我有一个训练有素的模型,该模型存储在redis(cache)中。为了最小化响应时间,我在服务器启动时将其加载到settings.py中。模型每隔2小时就会发生变化(训练),因此我需要以不变的方式重新获取。

MODEL = pickle.loads(redis_connection.get('model'))

如何在设置.py保持不变的情况下,如何从常数中重新获取此常量?

1 个答案:

答案 0 :(得分:0)

我认为将其放入settings.py文件中并不是一个好主意。 settings.py应该包含设置

但是,您可以添加例如模型名称,以便轻松更改该部分。例如:

# settings.py
MODEL_NAME = 'model'

然后,您可以构造一个基本上像缓存一样起作用的函数,并定期刷新以获取模型:

# utils.py
from datetime import datetime, timedelta

from django.conf import settings

from pickle import loads as ploads

def get_model():
    if get_model.model is None or datetime.now() > get_model.exires:
        get_model.model = ploads(redis_connection.get(settings.MODEL_NAME))
        get_model.expires = datetime.now() + timedelta(hours=2)
    return get_model.model


get_model.model = None
get_model.expires= datetime.now()

该函数因此检查模型是否已经存储在高速缓存中,并且仍然有效。如果不是这样,它将获取模型的(新版本)并将其存储。这种方法的优势在于,如果您的服务器没有收到与模型有关的请求。我们不会无故获取新模型并将其加载到系统中。

另一种方法是在某处放置这样的缓存,例如在线程中安排一些任务以定期获取新版本(因此本身不是需要,而是抢先 >)。