.. image:: http://img.shields.io/pypi/v/cachetools :target: https://pypi.org/project/cachetools/ :alt: Latest PyPI version
.. image:: https://img.shields.io/readthedocs/cachetools :target: http://cachetools.readthedocs.io/ :alt: Documentation build status
.. image:: http://img.shields.io/travis/tkem/cachetools :target: https://travis-ci.org/tkem/cachetools/ :alt: Travis CI build status
.. image:: http://img.shields.io/coveralls/tkem/cachetools :target: https://coveralls.io/r/tkem/cachetools :alt: Test coverage
.. image:: https://img.shields.io/github/license/tkem/cachetools :target: http://raw.github.com/tkem/cachetools/master/LICENSE :alt: License
This module provides various memoizing collections and decorators,
including variants of the Python Standard Library's @lru_cache
_
function decorator.
.. code-block:: python
from cachetools import cached, LRUCache, TTLCache
# speed up calculating Fibonacci numbers with dynamic programming @cached(cache={}) def fib(n): return n if n < 2 else fib(n - 1) + fib(n - 2)
# cache least recently used Python Enhancement Proposals @cached(cache=LRUCache(maxsize=32)) def get_pep(num): url = 'http://www.python.org/dev/peps/pep-%04d/' % num with urllib.request.urlopen(url) as s: return s.read()
# cache weather data for no longer than ten minutes @cached(cache=TTLCache(maxsize=1024, ttl=600)) def getweather(place): return owm.weatheratplace(place).getweather()
For the purpose of this module, a cache is a mutable_ mapping_ of a
fixed maximum size. When the cache is full, i.e. by adding another
item the cache would exceed its maximum size, the cache must choose
which item(s) to discard based on a suitable cache algorithm
_. In
general, a cache's size is the total size of its items, and an item's
size is a property or function of its value, e.g. the result of
sys.getsizeof(value)
. For the trivial but common case that each
item counts as 1
, a cache's size is equal to the number of its
items, or len(cache)
.
Multiple cache classes based on different caching algorithms are implemented, and decorators for easily memoizing function and method calls are provided, too.
cachetools is available from PyPI_ and can be installed by running::
pip install cachetools
Documentation
_Issue tracker
_Source code
_Change log
_Copyright (c) 2014-2020 Thomas Kemmer.
Licensed under the MIT License
_.
.. @lrucache: http://docs.python.org/3/library/functools.html#functools.lrucache .. _mutable: http://docs.python.org/dev/glossary.html#term-mutable .. _mapping: http://docs.python.org/dev/glossary.html#term-mapping .. _cache algorithm: http://en.wikipedia.org/wiki/Cachealgorithms
.. _PyPI: https://pypi.org/project/cachetools/ .. _Documentation: https://cachetools.readthedocs.io/ .. _Issue tracker: https://github.com/tkem/cachetools/issues/ .. _Source code: https://github.com/tkem/cachetools/ .. _Change log: https://github.com/tkem/cachetools/blob/master/CHANGELOG.rst .. _MIT License: http://raw.github.com/tkem/cachetools/master/LICENSE