【Python】cachetoolsを利用した処理の高速化
6476 ワード
- キャッシュを利用した処理の高速化が、pythonでも可能かどうかを調査。
- 結果、cachetoolsというライブラリを利用して容易に利用できることが判明。
- そこで今回はライブラリの概要と処理の記述例を記載。
- ※この内容では、概要や結果イメージ・基本記述を扱うため、詳細内容はドキュメントを参考。
概要
- cachetoolsとは、キャッシュを利用した高速化処理(メモ化)をまとめたコレクションライブラリ。
- 特徴は以下。
- 少ない記述で、多くのキャッシュアルゴリズムを扱うことができる。
- 拡張可能で、用途や環境に合わせて適切な仕組みへ変更することが可能。
- データはRAMに保存される。
- Github : cachetools
結果
- 以下の2枚の比較画像のように、少ない記述で容易に重たい処理を高速化することが可能。
環境
- 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)の呼び出し可能。
参考
Author And Source
この問題について(【Python】cachetoolsを利用した処理の高速化), 我々は、より多くの情報をここで見つけました https://qiita.com/t_o_d/items/2271ba83cf355344e396著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .