function_name方法分析
def function_namespace(f, args=None):
"""
Attempts to returns unique namespace for function
"""
返回带namespace的fname, 如果是实例方法, 还会返和这个对象有关系的带namespace的一个值
例如下面的类(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())
执行:
u = User(2)
u.get_r(2)
结果如下:
fname - demo.views.User.get_r
instance_fname - demo.views.User.get_r.User(2)
执行:
User.get(2)
结果如下:
fname - demo.views.User.get
instance_fname - None
继续分析
def _memoize_version(self, f, args=None,
reset=False, delete=False, timeout=None):
"""
Updates the hash version associated with a memoized function or method.
"""
返回一个带namespace的fname, 还有一个存在缓存中的version_data
生成key的过程就是
对func和参数生成一个唯一的值, 然后加上version_data, 就是缓存的key
对这个函数的所有缓存都失效:
if not args and not kwargs:
self._memoize_version(f, reset=True)