LoginSignup
7
8

More than 3 years have passed since last update.

【Python】cachetoolsを利用した処理の高速化

Posted at
  • キャッシュを利用した処理の高速化が、pythonでも可能かどうかを調査。
  • 結果、cachetoolsというライブラリを利用して容易に利用できることが判明。
  • そこで今回はライブラリの概要と処理の記述例を記載。
  • ※この内容では、概要や結果イメージ・基本記述を扱うため、詳細内容はドキュメントを参考。

概要

  • cachetoolsとは、キャッシュを利用した高速化処理(メモ化)をまとめたコレクションライブラリ。
  • 特徴は以下。
    • 少ない記述で、多くのキャッシュアルゴリズムを扱うことができる。
    • 拡張可能で、用途や環境に合わせて適切な仕組みへ変更することが可能。
    • データはRAMに保存される。
  • Github : cachetools

結果

  • 以下の2枚の比較画像のように、少ない記述で容易に重たい処理を高速化することが可能。

image.png

image.png

環境

  • Google Colaboratory

インストール

  • 以下のコマンドで、cachetoolsライブラリをインストールする。
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)の呼び出し可能。

参考

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8