matobaの備忘録

育児しながら働くあるエンジニアの記録

Pythonで関数呼び出しをキャッシュする

広告よけで持ってた技術メモです。 Pythonで関数呼び出しをキャッシュする方法。

functoolsの lru_cache デコレータやcacheデコレータが使えます。

lru_cacheデコレータの場合はこんな感じに使います。

from functools import lru_cache

@lru_cache(maxsize=32)
def get_hogehoge(num):
    ...

maxsizeは、直近の幾つをキャッシュとして保持するか、です。

他にもただの cache もあります。こちらは無制限。

詳細はこちらを参照

docs.python.org

他にPythonのドキュメントで、メソッドのキャッシュについて紹介されています。

メソッドのキャッシュにおいて

  • functools.cached_property() はインスタンスレベルのキャッシュ
  • functools.lru_cache() はクラスレベルのキャッシュ

とのこと。詳細は以下をどうぞ

docs.python.org

あと、簡単なコマンドラインツールのようなものの場合は、上記で十分だと思いますが、DjangoのようなWebアプリケーションでキャッシュを行う場合は、複数のインスタンス間でキャッシュを共有したいですね。

そういう場合、Djangoの場合は、キャッシュバックエンドがあるので、それを使います。

以前、この辺で近い情報を書いたので、今回はそちらへのリンクを貼ります。

blog.mtb-production.info