a simple decorator to cache the results of computationally heavy functions
Project description
A simple decorator to cache the results of computationally heavy functions. The package automatically serialize and deserialize depending on the format of the save path.
Currently it supports:
.json
.pkl
.pkl.gz
.pkl.bz
.pkl.lzma
.pkl.zip
.npy
.npz
.csv
.csv.gz
.csv.bz2
.csv.zip
.csv.xz
.xlsx
How do I install this package?
As usual, just download it using pip:
pip install cache_decorator
Tests Coverage
Since some software handling coverages sometime get slightly different results, here’s three of them:
Examples of Usage
To cache a function or a method you just have to decorate it with the cache decorator.
from time import sleep
from cache_decorator import cache
@cache()
def x(a, b):
sleep(3)
return a + b
class A:
@cache()
def x(self, a, b):
sleep(3)
return a + b
By default the cache is differentiate by the parameters passed to the function. One can specify which parameters should be ignored.
from time import sleep
from cache_decorator import cache
@cache(args_to_ignore=["verbose"])
def x(a, verbose=False):
sleep(3)
if verbose:
print("HEY")
return a
Multiple arguments can be specified as a list of strings with the name of the arguments to ignore.
from time import sleep
from cache_decorator import cache
@cache(args_to_ignore=["verbose", "multiprocessing"])
def x(a, verbose=False, multiprocessing=False):
sleep(3)
if verbose:
print("HEY")
return a
The default cache directory is ./cache but this can be setted by passing the cache_dir parameter to the decorator or by setting the environment variable CACHE_DIR. In the case both are setted, the parameter folder has precedence over the environment one.
from time import sleep
from cache_decorator import cache
@cache(cache_dir="/tmp")
def x(a):
sleep(3)
return a
The path format can be modified by passing the cache_path parameter. This string will be formatted with infos about the function, its parameters and, if it’s a method, the self attributes.
De default path is:
from time import sleep
from cache_decorator import cache
@cache(cache_path="{cache_dir}/{file_name}_{function_name}/{_hash}.pkl")
def x(a):
sleep(3)
return a
But can be modified giving cache a more significative name, for example we can add the value of a into the file name.
from time import sleep
from cache_decorator import cache
@cache(cache_path="{cache_dir}/{file_name}_{function_name}/{a}_{_hash}.pkl")
def x(a):
sleep(3)
return a
Or we could also add values from the self.
from time import sleep
from cache_decorator import cache
class A:
def __init__(self, value):
self.value = value
@cache(cache_path="{cache_dir}/{file_name}_{function_name}/{value}_{_hash}.pkl")
def x(a):
sleep(3)
return a
Depending on the extension of the file, different serialization and deserialization dispatcher will be called.
from time import sleep
from cache_decorator import cache
@cache(cache_path="{cache_dir}/{_hash}.pkl.gz")
def x(a):
sleep(3)
return a
from time import sleep
from cache_decorator import cache
@cache(cache_path="{cache_dir}/{_hash}.json")
def x(a):
sleep(3)
return {"1":1,"2":2}
import numpy as np
from time import sleep
from cache_decorator import cache
@cache(cache_path="{cache_dir}/{_hash}.npy")
def x(a):
sleep(3)
return np.array([1, 2, 3])
import numpy as np
from time import sleep
from cache_decorator import cache
@cache(cache_path="{cache_dir}/{_hash}.npz")
def x(a):
sleep(3)
return np.array([1, 2, 3]), np.array([1, 2, 4])
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.