No project description provided
Project description
Cachephant
Cachephant is a small python library which caches function output to disk to avoid unnecessary recomputation. It's aimed for use in Jupyter notebooks.
Problem
There's already joblib.Memory
and diskcache.memoize
. However, they didn't provide the behavior I desired (see table below):
- Joblib is very conservative and it's cache cannot be reused after restarting the Jupyter kernel. Moreover, unrelated code changes lead to cache invalidation.
- In contrast, diskcache is very liberal in its cache reuse and doesn't notice function code or signature changes. (This may be great for running a stable web app for weeks, but less idea for data science development.)
uses cache if... | joblib | diskcache | cachephant |
---|---|---|---|
Jupyter kernel restarts | n | y | y |
same "resolved" arguments | n | n ! | y |
some unrelated code changes | n | y | y |
some related code changes | n | y | y (n would be ideal but difficult) |
function code changes | n | y ! | n |
function signature changes | raises error | y ! | n |
How to use
import cachephant
cache = cachephant.get_default_cache("/path/to/dir")
@cache
def slow_function():
time.sleep(10)
return 3
You can also instantiate cachephant.Cache()
and easily pass custom database-, file-, hash-, and evictor-classes.
Non-goals
This library is not meant for high frequency use cases (think hundreds of cache reads/writes per second) and you'll likely see performance issues.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
cachephant-0.2.1.tar.gz
(6.6 kB
view hashes)
Built Distribution
Close
Hashes for cachephant-0.2.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4db0ec2e87a883295e7b3cf996fe0a45dc88d09b64240b97f9eef24c759d3b45 |
|
MD5 | 9c1e50eea328d4f69e1fcba30c171e57 |
|
BLAKE2b-256 | 5fabffd5a6a43cca2ef2892e86b50d7218e11b5bedeb3dd1d7bb39de48b006c1 |