function_name方法分析
def function_namespace(f, args=None):
"""
Attempts to returns unique namespace for function
"""
返回帶namespace的fname, 如果是實(shí)例方法, 還會(huì)返和這個(gè)對(duì)象有關(guān)系的帶namespace的一個(gè)值
例如下面的類(demo/views.py):
class User(object):
def __init__(self, id):
self.id = id
def __repr__(self):
return '{0}({1})'.format(self.__class__.__name__, self.id)
@classmethod
@cache.memoize(timeout=3)
def get(cls, id):
r = id + random.random()
return 'User - {0}'.format(r)
@cache.memoize(timeout=3)
def get_r(self, base):
return 'base - '.format(base + random.random())
執(zhí)行:
u = User(2)
u.get_r(2)
結(jié)果如下:
fname - demo.views.User.get_r
instance_fname - demo.views.User.get_r.User(2)
執(zhí)行:
User.get(2)
結(jié)果如下:
fname - demo.views.User.get
instance_fname - None
繼續(xù)分析
def _memoize_version(self, f, args=None,
reset=False, delete=False, timeout=None):
"""
Updates the hash version associated with a memoized function or method.
"""
返回一個(gè)帶namespace的fname, 還有一個(gè)存在緩存中的version_data
生成key的過程就是
對(duì)func和參數(shù)生成一個(gè)唯一的值, 然后加上version_data, 就是緩存的key
對(duì)這個(gè)函數(shù)的所有緩存都失效:
if not args and not kwargs:
self._memoize_version(f, reset=True)
flask-cache.png