Skip to main content

disk_cache_data decorator

Fully configurable decorator with functionnality as Streamlit st.cache_data with local disk storage as backend.

Installation

pip install mysiar-disk-cache-data

Usage

disk_cache_data

ttl accepts:

  • None or no ttl at all - the entry never expires, same as st.cache_data
  • a number of seconds, e.g. 30
  • a string, e.g. "30s", "5m", "2h", "1d", "1d 4h"
  • 0 - caching is bypassed and the function runs every call

Configuration by environment variables:

  • DISK_CACHE_DISABLED=1 - disable caching
  • DISK_CACHE_DEBUG=1 - enable debug logging (currently by print statements)
  • DISK_CACHE_DIR=/path/to/cache/dir - set custom cache directory (default is /tmp/disk_cache)
  • DISK_CACHE_NAMESPACE - subfolder for namespacing (default is disk_cache)
from mysiar.disk_cache_data import disk_cache_data

@disk_cache_data(ttl="30s")
def load_data(a, b):
    return a + b

# first call is whole function process
result = load_data(1, 2)
# each next call within ttl is cached
result = load_data(1, 2)

Excluding an argument from the cache key

An argument whose parameter name starts with an underscore is left out of the cache key, as in st.cache_data. It still reaches the function on every computed call, but changing it does not create a new entry. Use it for values the result does not depend on, or for values that are expensive or impossible to hash.

The name is resolved from the function signature, so the rule applies whether the caller passes the argument positionally or by keyword.

@disk_cache_data(ttl="30s")
def load_data(a, _conn):
    return _conn.query(a)

load_data(1, conn_one)   # computed and cached
load_data(1, conn_two)   # hits the entry above; conn_two is not part of the key

Values absorbed by a *args parameter have no name to test, so they are always hashed.

Arguments are keyed by name rather than by position, so a positional call and a keyword call with the same values reach the same entry, and keyword order never matters:

load_data(1, conn)             # computed and cached
load_data(a=1, _conn=conn)     # hits the same entry

Clearing the cache of one function

Each decorated function stores its entries in its own subdirectory of the namespace, so a function can drop its own cache without touching any other function.

# drop every cached entry of load_data in the current namespace
load_data.clear()

# drop only the entry cached for these arguments
load_data.clear(1, 2)

# drop the entries of load_data in every namespace under DISK_CACHE_DIR
load_data.clear_all_namespaces()

# path of the directory holding the entries of load_data
path = load_data.cache_dir()

disk_cache_cleanup

Function to cleanup expired or corrupt cache files across all namespaces. It also removes emptied function directories and leftovers of interrupted clear() calls. Entries cached with ttl=None never expire, so cleanup leaves them alone - drop them with clear().

An entry is a pair of files, <key>.pkl and <key>.meta. A crash between the two writes leaves one file without its pair, and cleanup removes it once it is older than 60 seconds. The grace period keeps a writer that is still creating the pair from losing it, and it can be changed per call.

from mysiar.disk_cache_data import disk_cache_cleanup

disk_cache_cleanup()

# drop half written entries immediately instead of after 60 seconds
disk_cache_cleanup(orphan_grace_seconds=0)

Download files

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

Source Distribution

mysiar_disk_cache_data-0.3.0.tar.gz (15.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mysiar_disk_cache_data-0.3.0-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

Details for the file mysiar_disk_cache_data-0.3.0.tar.gz.

File metadata

  • Download URL: mysiar_disk_cache_data-0.3.0.tar.gz
  • Upload date:
  • Size: 15.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.13

File hashes

Hashes for mysiar_disk_cache_data-0.3.0.tar.gz
Algorithm Hash digest
SHA256 86ffab669f24127bafddf5026af61a93d64c729a1ccff14feb5d4f12f62b3138
MD5 3149d1f004075a99bc1bae93f1654016
BLAKE2b-256 dffb3c5a316f546cb24e9ea4cdc79d67910bfd47d352b7c5cb90638ac32d6e5e

See more details on using hashes here.

File details

Details for the file mysiar_disk_cache_data-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mysiar_disk_cache_data-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a37b688d9774f401422b49d8ce4ca906006dfc3848d0ba213ef95117cfffcd5
MD5 7b4918b1ce92bac54e5f119dbbe10d4d
BLAKE2b-256 b23add5efcfde13a7a990489551a03b8042e59bfd37f67e64a95db0807fa8c29

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 files

0.2.0

2 files

0.1.0

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page