🐍
Pythonでcachetoolsを利用した処理の高速化
- キャッシュを利用した処理の高速化が、pythonでも可能かどうかを調査。
- 結果、cachetoolsというライブラリを利用して容易に利用できることが判明。
- そこで今回はライブラリの概要と処理の記述例を記載。
- ※この内容では、概要や結果イメージ・基本記述を扱うため、詳細内容はドキュメントを参考。
概要
- cachetoolsとは、キャッシュを利用した高速化処理(メモ化)をまとめたコレクションライブラリ。
- 特徴は以下。
- 少ない記述で、多くのキャッシュアルゴリズムを扱うことができる。
- 拡張可能で、用途や環境に合わせて適切な仕組みへ変更することが可能。
- データはRAMに保存される。
- Github : cachetools
結果
- 以下の2枚の比較画像のように、少ない記述で容易に重たい処理を高速化することが可能。
環境
- Google Colaboratory
インストール
- 以下のコマンドをcolaboratory上でうち、cachetoolsをインストールする。
- ※ローカル上でPythonを利用する場合、先頭の!は必要ない。
!pip install cachetools
記述例
※この内容では、概要や結果イメージ・基本記述を扱うため、詳細内容はドキュメントを参考。
基本
- 標準(オプション指定無し)のキャッシュ処理を利用する場合。
# ライブラリの読み込み
from cachetools import cached
# キャッシュ有効化
@cached(cache ={})
def fibonacci(n):
if n <= 2:
return 1
else:
return fibonacci(n - 2) + fibonacci(n - 1)
print(fibonacci(30))
各オプション
- 以下利用できるキャッシュ処理の種類は下記。
名前 | 内容 |
---|---|
TTLCache | キャッシュの存続可能時間指定。 存続可能時間を超えたものにはアクセス不可。 最も使用頻度の低いアイテムから破棄される。 |
LFUCache | 最小使用頻度。アイテム取得頻度を計測して、最も頻繁に使用されていないものから破棄 |
LRUCache | 最長未使用頻度。最も長く使用されていないものから破棄 |
RRCache | ランダム。アイテムをランダムに選択して、そこから破棄 |
- 以下、記述例
# ライブラリの読み込み
from cachetools import cached, LFUCache, TTLCache, RRCache
@cached(cache=LFUCache(maxsize=10)) # 最大保持数
def get_all_item:
# 処理
@cached(cache=TTLCache(maxsize=10, ttl=300)) # 最大保持数と存続可能時間
def get_user_item:
# 処理
@cached(cache=RRCache(maxsize=10, choice=min)) # 最大保持数と任意の要素を返す代替関数
def get_random:
# 処理。cache.choiceで指定関数(min)の呼び出し可能。
Discussion