Guide for using caching utilities in speedy_utils, including memory, disk, and hybrid caching strategies for sync and async functions.
This skill provides comprehensive guidance for using the caching utilities in speedy_utils.
Use this skill when you need to:
imemoize for persistent caching in interactive environments like Jupyter notebooks.speedy_utils installed in your environment.@memoize)memory, disk, and both (hybrid) caching backends.sync and async functions.@imemoize)%load).identify)Cache results in both memory and disk.
from speedy_utils import memoize
import time
@memoize(cache_type='both', size=128)
def expensive_func(x: int):
time.sleep(1)
return x * x
Cache results of an async function to disk.
from speedy_utils import memoize
import asyncio
@memoize(cache_type='disk', cache_dir='./my_cache')
async def fetch_data(url: str):
# simulate network call
await asyncio.sleep(1)
return {"data": "content"}
Use a custom key function for complex arguments.
from speedy_utils import memoize
def get_user_id(user):
return user.id
@memoize(key=get_user_id)
def process_user(user):
# ...
pass
Use @imemoize to keep cache even if you reload the cell/module.
from speedy_utils import imemoize
@imemoize
def notebook_func(data):
# ...
return result
Choose the Right Backend:
memory for small, fast results needed frequently in one session.disk for large results or to persist across runs.both (default) for the best of both worlds.Key Stability:
key function).identify handles most common types, but be careful with custom classes without __repr__ or stable serialization.Cache Directory:
~/.cache/speedy_cache.cache_dir for project-specific caching.Async Support:
async functions and handle await correctly.await.selfBy default, ignore_self=True is set. This means methods on different instances of the same class will share cache if other arguments are the same. Set ignore_self=False if the instance state matters.
class Processor:
def __init__(self, multiplier):
self.multiplier = multiplier
@memoize(ignore_self=False)
def compute(self, x):
return x * self.multiplier
pickle (or JSON). Ensure return values are serializable.