python-Django,Borg模式,API调用,缓存结果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Django,Borg模式,API调用,缓存结果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1550字,纯文字阅读大概需要3分钟。
内容图文
我使用的是来自其他网站的API,该API返回了我的用户用来购买虚拟商品的几个“价格网址”.
我应该将这些结果至少保留一个小时,因为它们对系统价格的影响不大. (并且我们想同时节省带宽和带宽.)
在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']
如果现有信息早于一个小时,则商店应正确初始化并仅获取新的价格点信息.
不过,每次PriceStore初始化时,我似乎都在使用他们的API.谁能发现我的问题?我可以在django中使用__shared_state之类的全局变量,并期望它仍然包含定价信息吗?
谢谢!
解决方法:
I seem to be hitting their API with
every time that PriceStore is
initialized, though. Can anyone spot
my problem?
是的,很容易发现:
def __init__(self):
self.__dict__ = self.__shared_state
self.lastUpdate = None
self.lastUpdate = None绝对保证在紧随其后的self.update()调用将发现self.lastUpdate的值为None -您只是强迫这样做!
删除__init__中的self.lastUpdate = None,例如,改用
lastUpdate = None
在班级的身体水平,例如就在__shared_state = {}分配之后,并且与该分配具有相同的对齐方式.这将使事情按预期工作.
内容总结
以上是互联网集市为您收集整理的python-Django,Borg模式,API调用,缓存结果全部内容,希望文章能够帮你解决python-Django,Borg模式,API调用,缓存结果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。