我试图缓存一个函数的返回值,以防它不是无。
在下面的示例中,缓存 someFunction 的结果是有意义的,以防它设法从 some-url 获取数据一小时。
如果无法获取数据,将结果缓存一个小时(或更长时间)是没有意义的,但可能会缓存 5 分钟(因此 some-domain.com 的服务器有一些时间来恢复)
def _cachekey(method, self, lang):
return (lang, time.time() // (60 * 60))
@ram.cache(_cachekey)
def someFunction(self, lang='en'):
data = urllib2.urlopen('http://some-url.com/data.txt', timeout=10).read()
except socket.timeout:
data = None
except urllib2.URLError:
data = None
return expensive_compute(data)
调用method(self, lang)
_cachekey 没有多大意义。