MrLinch
@MrLinch
Just like coding...

Как организовать правильно кеширование объекта (не модели) в Django?

Добрый день!

Есть класс PaymentChecker его создание занимает довольно много времени, и в каждом запросе создавать его не выгодно, так как от запроса к запросу он не изменяется то есть нужно что то вроде синглтона. Поэтому собствено вопрос как его правильно кешировать или организовать в виде синглтона.

Буде правильно вынести его в отдельный файл например utils.py следующего вида:

# utils.py

class PaymentChecker(object):
    ....

payment_checker = PaymentChecker(<some constant args>)

# views.py
import utils

class CheckPayment(View):
    def get(...):
           if utils.payment_checker.check(...):
               ....


Заранее спасибо :-)
  • Вопрос задан
  • 406 просмотров
Решения вопроса 1
suguby
@suguby
программист, python, django, mysql, git, hg, linux
Если на этапе компиляции достаточно данных для создания - так можно.

Другой вариант сделать lazy-геттера, что-то типа
_payment_checker = None
def get_payment_checker():
     global _payment_checker
     if _payment_checker is None:
          _payment_checker =  PaymentChecker(<some constant args>)
     return _payment_checker


или то же самое через статик метод класса
class PaymentChecker(object):
    __instance = None
    @classmethod
    def get_checker(cls):
         if cls.__instance is None:
               cls.__instance =  cls(<some constant args>)
         return cls.__instance

второй вариант предпочтительней - развивать легче :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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