Dynamic input-output caching for deterministic functions
Features
- Keep It Simple, Stupid: A single decorator that does everything for you
- Automagically detects if the decorated function is changed and transparently updates cache accordingly without ever returning cached results of the old function.
Installation
pip3 install dyncache
Examples
# Import the class
from dyncache import Cache
# Use with default options. It will create a file "circle_area.dyncache" into
# the current directory.
@Cache()
def circle_area(radius):
return 3.14159 * (radius ** 2)
# Empty parentheses are not required for the decorator.
@Cache
def circle_area(radius):
return 3.14159 * (radius ** 2)
circle_area(2) # Calculates and returns
circle_area(3) # Calculates and returns
circle_area(2) # Returns from cache
# Saves the cache to /tmp/hello.world.
@Cache(root="/tmp", filename="hello.world")
def circle_area(radius):
...
# Use for function with large input/output -values.
@Cache(largeitems=True)
def load_all_api_data_for_a_day(day):
...
# When items are small and cache would update too often, setting autowrite to
# False lets you control when the cached data is written to the file.
cache = Cache(autowrite=False)
@cache
def really_frequent_function(a, b):
...
...
cache.write() # Write cache data to the file
sys.exit(0)
Contributing
- Send any issues to GitHub's issue tracker.
- Before sending a pull request, format it with Black (-Sl79)
- Any changes must be updated to the documentation
- All pull requests must be tested with tox (if you are using pyenv, add the installed versions for py35-py38 and pypy3 to .python-version at the root of this repository before running tox)