diskcache を使ってみる

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 をフィルタとしてかますことができます。用途としては暗号化や圧縮があるかと思います。

投稿者について
みのしす

小さいときは科学者になろうとしたのに、その時にたまたま身に着けたプログラミングで未だに飯を食っているしがないおじさんです。(年齢的にはもうすぐおじいさん)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です