Skip to content

Minimally cache python function outputs on disk!

Notifications You must be signed in to change notification settings

chr5tphr/funcache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Funcache

Caching function outputs by hashing inputs using MetroHash.

Example

from timeit import timeit
from shutil import rmtree

import numpy as np
from funcache import cache

cache_path = '/tmp/__democache__'

# default path to store cache can be set like the following:
@cache(cache_path)
def linear(data, weight, bias):
    return data @ weight + bias

for size in [1024, 2048, 4096, 8192]:
    data = np.zeros((size, size))
    weight = np.zeros((size, size))
    bias = np.zeros((size,))

    # the original, uncached function can be accessed as linear.__wrapped__
    dtime_u = timeit(
        lambda: linear.__wrapped__(data, weight, bias),
        number=1
    )

    # caching path can also be set using the keyword argument '_cache',
    # and disabled by setting it to None
    dtime_1 = timeit(
        lambda: linear(data, weight, bias, _cache=cache_path),
        number=1
    )

    dtime_2 = timeit(lambda: linear(data, weight, bias), number=1)

    print("Size: {}".format(size))
    print("    Uncached: {:.3f}s".format(dtime_u))
    print("    Cached 1: {:.3f}s".format(dtime_1))
    print("    Cached 2: {:.3f}s".format(dtime_2))

rmtree(cache_path)

Releases

No releases published

Packages

No packages published

Languages