Как перезагрузить некоторые константы, определенные в settings.py (Django) после каждого периода времени?

В Java, когда оператор «==» используется для сравнения двух объектов, он проверяет, ссылаются ли объекты на одно и то же место в памяти. Другими словами, он проверяет, являются ли имена двух объектов в основном ссылками на одно и то же место в памяти.

Класс Java String фактически переопределяет реализацию equals () по умолчанию в классе Object и переопределяет этот метод, чтобы он проверял только значения строк, а не их местоположения в памяти. Это означает, что если вы вызываете метод equals () для сравнения двух объектов String, то, пока действительная последовательность символов равна, оба объекта считаются равными.

Оператор == проверяет, являются ли две строки точно одним и тем же объектом.

Метод .equals() проверяет, имеют ли две строки одно и то же значение.

1
задан Willem Van Onsem 13 July 2018 в 11:05
поделиться

1 ответ

Я думаю, что положить это в файл 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()

Таким образом, функция проверяет, модель уже хранится в кеше и все еще действительна. В противном случае он извлекает (новую версию) модели и сохраняет ее. Преимущество такого подхода заключается в том, что если ваш сервер не получает запросы, связанные с моделью. Мы не загружаем и не загружаем новую систему в систему.

Альтернатива заключается в том, что где-то есть такой кеш и, например, планировать некоторую задачу в потоке для периодической выборки новой версии (так что не в se по необходимости , но превентивно ).

0
ответ дан Willem Van Onsem 17 August 2018 в 13:05
поделиться
  • 1
    Работает отлично. Но есть ли небольшое сомнение в том, как get_model.model = None это работает? – Paras Asati 13 July 2018 в 13:15
  • 2
    Функция (как и все в Python) - это просто другой объект, вы можете также назначить атрибуты модели. Мы используем это, чтобы привязать загруженную модель к функции. – Willem Van Onsem 13 July 2018 в 13:22
Другие вопросы по тегам:

Похожие вопросы: