Я использую API с другого сайта, который возвращает пару «ценовых URL-адресов, которые мои пользователи используют для покупки виртуальных товаров.
Я должен кешировать эти результаты не менее часа, так как они не сильно меняют цены в своей системе. (И мы хотим сохранить и нашу, и их пропускную способность.)
После поиска синглтонов в Python я обнаружил шаблон borg, который кажется еще круче, поэтому я сделал следующее:
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. Кто-нибудь может определить мою проблему? Могу ли я использовать в django глобальную переменную, такую как __shared_state
, и ожидать, что она все еще будет содержать информацию о ценах?
Спасибо!