Я использую API с другого сайта, который возвращает пару URL-адресов цены, которые мои пользователи используют для покупки виртуальных товаров.Django, Borg pattern, API-вызовы, результаты кэширования
Я должен кэшировать эти результаты не менее часа, так как они не меняют цены на их систему. (И мы хотим сохранить и наши и их пропускную способность.)
После ищу Синглтон в Python я обнаружил шаблон Борга, который, кажется, еще круче, так это то, что я сделал:
def fetchPrices():
#uses urllib2.urlopen() to fetch prices
#parses results with ElementTree
return prices
class PriceStore():
__shared_state = {}
def update(self):
if self.lastUpdate is not None and (datetime.now() - self.lastUpdate).seconds >= 3600:
self.prices = fetchPrices()
self.lastUpdate = datetime.now()
elif self.lastUpdate is not None:
return
else:
self.lastUpdate = datetime.now() - timedelta(hours=1)
self.update()
def __init__(self):
self.__dict__ = self.__shared_state
self.lastUpdate = None
self.update()
Идея будет использовать это следующим образом:
store = PriceStore()
url = store.prices['2.9900']['url']
и магазин должен инициализировать правильно, и только получать новую информацию цене, если существующая информация старше одного часа.
Я, кажется, нажимаю их API каждый раз, когда PriceStore инициализируется. Может ли кто-нибудь определить мою проблему? Могу ли я использовать глобальную переменную типа __shared_state
в django и ожидать, что она по-прежнему будет содержать информацию о ценах?
Спасибо!
Спасибо людям! Извините, что 3 из вас заметили мою ошибку точно в одно и то же время! Вы, конечно, все в порядке. Это лучший способ кэширования результата API, или вы сделали что-то более холодное? – rdrey