推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
fanhaipeng0403
V2EX  ›  Python

class property 缓存

  •  
  •   fanhaipeng0403 · Dec 30, 2018 · 1545 views
    This topic created in 2717 days ago, the information mentioned may be changed or developed.
    from threading import RLock
    
    _missing = object()
    
    
    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
                
    
    In [27]: class B:
        ...:     @locked_cached_property
        ...:     def foo(self):
        ...:         import time
        ...:
        ...:         print('processing....')
        ...:         time.sleep(10)
        ...:         return 'b'
        ...:
        ...:
    
    In [28]: b = B()
    
    In [29]: b.foo
    processing....
    Out[29]: 'b'
    
    In [30]: b.foo
    Out[30]: 'b'
    
    In [31]:
    
    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   864 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
    ♥ Do have faith in what you're doing.