我有一个训练有素的模型,该模型存储在redis(cache)中。为了最小化响应时间,我在服务器启动时将其加载到settings.py
中。模型每隔2小时就会发生变化(训练),因此我需要以不变的方式重新获取。
MODEL = pickle.loads(redis_connection.get('model'))
如何在设置.py保持不变的情况下,如何从常数中重新获取此常量?
答案 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()
该函数因此检查模型是否已经存储在高速缓存中,并且仍然有效。如果不是这样,它将获取模型的(新版本)并将其存储。这种方法的优势在于,如果您的服务器没有收到与模型有关的请求。我们不会无故获取新模型并将其加载到系统中。
另一种方法是在某处放置这样的缓存,例如在线程中安排一些任务以定期获取新版本(因此本身不是需要,而是抢先 >)。