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.2.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.2.0-py3-none-any.whl (8.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mysiar_disk_cache_data-0.2.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.2.0.tar.gz
Algorithm Hash digest
SHA256 fbf16534526025bd97e5d9183f3cae051270ecd58af031f1ca9ca1486772b9ac
MD5 790174c430b95d26a646c8618b9c4212
BLAKE2b-256 55f876876782924ab50c892c9d973f009329866d72235c2cc1f3362930318892

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mysiar_disk_cache_data-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0ef79bde0f2ae1e3fef465660005de990e528d410a0a9fb69eb9fea29b3ddf7a
MD5 a63703e077397415ae929465d69f3bbb
BLAKE2b-256 9874924ceff8fcd802b350c51325d030364fa7f19f413255a1dc07a979ec9a73

See more details on using hashes here.

Release history Release notifications | RSS feed

0.3.0

2 files

This release

0.2.0 This release

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