@locked_cached_property ---flask.helpers模块

源码: 
class locked_cached_property(object):
"""A decorator that converts a function into a lazy property. The
function wrapped is called the first time to retrieve the result
and then that calculated result is used the next time you access
the value. Works like the one in Werkzeug but has a lock for
thread safety.
"""

def __init__(self, func, name=None, doc=None):
self.__name__ = name or func.__name__
self.__module__ = func.__module__
self.__doc__ = doc or func.__doc__
self.func = func
self.lock = RLock()

def __get__(self, obj, type=None):
if obj is None:
return self
with self.lock:
value = obj.__dict__.get(self.__name__, _missing)
if value is _missing:
value = self.func(obj)
obj.__dict__[self.__name__] = value
return value


其中RLock() 是核心,threading模块



from threading import RLock
from threading import Lock

两者的区别:
Lock ---线程锁,用于避免竞争
RLock ---
posted @ 2017-03-24 08:48  八月的男人  阅读(707)  评论(0编辑  收藏  举报