広告よけで持ってた技術メモです。 Pythonで関数呼び出しをキャッシュする方法。
functoolsの lru_cache デコレータやcacheデコレータが使えます。
lru_cacheデコレータの場合はこんな感じに使います。
from functools import lru_cache @lru_cache(maxsize=32) def get_hogehoge(num): ...
maxsizeは、直近の幾つをキャッシュとして保持するか、です。
他にもただの cache もあります。こちらは無制限。
詳細はこちらを参照
他にPythonのドキュメントで、メソッドのキャッシュについて紹介されています。
メソッドのキャッシュにおいて
- functools.cached_property() はインスタンスレベルのキャッシュ
- functools.lru_cache() はクラスレベルのキャッシュ
とのこと。詳細は以下をどうぞ
あと、簡単なコマンドラインツールのようなものの場合は、上記で十分だと思いますが、DjangoのようなWebアプリケーションでキャッシュを行う場合は、複数のインスタンス間でキャッシュを共有したいですね。
そういう場合、Djangoの場合は、キャッシュバックエンドがあるので、それを使います。
以前、この辺で近い情報を書いたので、今回はそちらへのリンクを貼ります。