Python にはいくつか所謂 key-value store 実装がありますが、一番速そうな diskcache を使ってみます。
インストールは
pip3 install diskcache
Diskcache はいくつかのオブジェクトを含んでいますが、Cache, FanoutCache, DjangoCache 当たりが良く使いそうなオブジェクトです。
Dict と同じインタフェースを使い、そのまま key-value store として使っても良いのですが、memoize デコレータが用意されており、戻り値のある任意の関数を「メモ化」することも可能です。
from diskcache import Cache
cache = Cache("/path/to/cache")
@cache.memoize
def fibonacci(i):
if i == 0:
return 1
if i == 1:
return 2
return fibonacci(i-1) + fibonacci(i-2)
機能としては、functools.lru_cache と同じになるとのことです。
diskcache はディスクとの読み書きに使用するフィルタを変更することができます。例えば、
from diskcache import Disk, Cache
class MyDisk(Disk):
def store(self, value, read, key = None):
value = self.transform(value)
super(MyDisk, self).store(value, read)
def fetch(self, mode, filename, value, read):
super(MyDisk, self).fetch(mode, filename, value, read)
value = self.reverse_transform(value)
return value
def transorm(self, value):
...
def reverse_transform(self, value):
...
と定義すると、
cache = Cache("/path/to/cache", disk=MyDisk)
という形で自作の MyDisk をフィルタとしてかますことができます。用途としては暗号化や圧縮があるかと思います。
コメントを残す