Skip to main content

Cache expensive function calls to disk.

Project description

locache - a local and persistent cache for Python

PyPI PyPI - Downloads GitHub codecov

locache is a single-file, 0-dependency utility package for caching the results of deterministic and pure function calls to disk, exposed via the @persist decorator.

These caches are:

  • persistent across separate Python sessions: run the function once to cache the result to disk, and then hit the cache again and again in different runs/notebooks/scripts/sessions
  • aware of the function's source code: if the function's source code changes, new values will be cached. If you change the source code back, the old values will still be in the cache (useful for using different versions of a function on e.g. different branches)
  • configurable with max_entries and max_age parameters: control how many entries to store, and how long to keep them in the cache for.

Use-case

Have you ever written something like this?

# result = expensive_function(X, y)
result = np.load("cached_result.npy")

This is somewhat dangerous: what if you have changed expensive_function and forgotten to update the cache? Or accidentally deleted your cache file? Or you have result = np.load("cached_result-v3-final.npy")?

locache.persist is an easy way to avoid these issues:

  1. wrap expensive_function with @persist
  2. call expensive_function as usual
  3. locache automatically caches the result of expensive_function to disk. If the function's source code changes, new values will be cached.

Installation

locache is simple enough that you could have written it yourself. To use it in your project, either:

  • copy the locache.py file into your project
  • install it with pip install locache

API

locache provides 3 importable functions:

  • the @persist decorator
  • reset
  • verbose

@persist / @persist(max_entries=-1, max_age=365)

Wrap a pure function with @persist in order to cache its results to disk. The only stipulation is that the function's arguments and return value must be pickle-able.

>>> from locache import persist

>>> @persist
... def my_func(x, num=3):
...     print("Hi from foo!")
...     return x * num

>>> my_func(1) # function behaviour is unchanged       
Hi from foo!
3
>>> my_func(2, num=2) 
Hi from foo!
4
>>> my_func(1)  # cached results are returned
3

By default, @persist will store up to unlimited entries. Each of these will be removed 365 days after they are last accessed. These parameters can be changed by passing max_entries and max_age to @persist.

reset(func: Callable)

Reset the cache for a given function.

>>> from locache import reset

>>> @persist
... def squared(x):
...     print(f"Squaring {x}")
...     return x * x

>>> squared(2)  # cache miss
Squaring 2
4
>>> squared(2)  # cache hit
4
>>> reset(squared)
>>> squared(2)  # cache miss
Squaring 2
4

verbose(yes: bool = True)

Turn on verbose, debug logging.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

locache-4.0.2.tar.gz (6.5 kB view details)

Uploaded Source

Built Distribution

locache-4.0.2-py3-none-any.whl (6.5 kB view details)

Uploaded Python 3

File details

Details for the file locache-4.0.2.tar.gz.

File metadata

  • Download URL: locache-4.0.2.tar.gz
  • Upload date:
  • Size: 6.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for locache-4.0.2.tar.gz
Algorithm Hash digest
SHA256 c372ddfe0983094330e7ac4c186b428a0d1cd22e1c539109910ddae5bb588971
MD5 494243990c4c0ca4ef9b9ce04303f602
BLAKE2b-256 b6649a422ad9a00291fb8930b49e47ba0a56f38bf52792fa843e7e2f17f9cb6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for locache-4.0.2.tar.gz:

Publisher: publish.yaml on jla-gardner/locache

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file locache-4.0.2-py3-none-any.whl.

File metadata

  • Download URL: locache-4.0.2-py3-none-any.whl
  • Upload date:
  • Size: 6.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for locache-4.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 195a34af8f3d24cf0ce56e5a81ee6bbb6af89da07f9502e0c5ca8ae6e94f9365
MD5 a1eefc339a5557513169a19ab2be2c44
BLAKE2b-256 bf8fdab996d563d2fd690fde3080d16763026e09ce11f5b1bad7461832d15ec3

See more details on using hashes here.

Provenance

The following attestation bundles were made for locache-4.0.2-py3-none-any.whl:

Publisher: publish.yaml on jla-gardner/locache

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page