J'utilise une API d'un site différent qui renvoie deux adresses URL de prix que mes utilisateurs utilisent pour acheter des biens virtuels.Django, modèle Borg, appels d'API, résultats de la mise en cache
Je suis censé mettre en cache ces résultats pendant au moins une heure, car ils ne modifient pas beaucoup les prix sur leur système. (Et nous voulons sauver nos deux années et leur bande passante.)
Après avoir cherché années singleton en Python j'ai découvert le modèle de borg, qui semble encore plus cool, donc ce que je l'ai fait:
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()
L'idée est d'utiliser ce de la manière suivante:
store = PriceStore()
url = store.prices['2.9900']['url']
et le magasin doit initialiser correctement et ne chercher de nouvelles informations de point de prix, si l'information existante est plus d'une heure. Il semble que je tape sur leur API à chaque fois que PriceStore est initialisé, par contre. Quelqu'un peut-il repérer mon problème? Puis-je utiliser une variable globale comme __shared_state
dans django et m'attendre à ce qu'elle contienne toujours des informations de prix?
Merci!
Merci les gens! Désolé que 3 d'entre vous aient repéré mon erreur exactement au même moment! Vous allez bien sûr bien sûr. Est-ce la meilleure façon de mettre en cache un résultat d'API, ou avez-vous fait quelque chose de plus cool? – rdrey