0

引数を指定すると、対応する値を計算して返す関数があります。関数の戻り値は、そのパラメータにのみ依存するため、何らかの方法で値をキャッシュ (メモ化) したいと考えています。さらに、キャッシュされた値を無効にできるようにしたいです。

これは一般的なニーズのように思われるので、車輪の再発明は避けようとしています。

私が探しているのは、高度に構成可能な高性能ライブラリ (ツール、フレームワークなど) であり、変更をできるだけ無駄のないものにしたいと考えています。いくつかの良い点は次のとおりです。

  • 同時リクエストを効率的に処理する
  • 異なるキャッシュ バックエンド (RAM や DB など) を使用できる
  • 大規模データに対する応答性の維持

使用するのに適したライブラリは何ですか?それらはどのように比較されますか?

4

2 に答える 2

3

functools.lru_cacheシンプルなメモリ内キャッシュであるを使用できます。

キャッシュされた関数の例:

import functools

@functools.lru_cache()
def f(x, y):
    return x+y

print(f(7, 4))
11

キャッシュ全体をクリアします。

f.cache_clear()

特定の値のキャッシュをクリアします (キャッシュ dict に直接アクセスできないため、ダーティ、ダーティ ハック):

def clear_cache_value(cached_function, *args, **kwargs):
    cache = next(c.cell_contents for c in cached_function.cache_info.__closure__ if isinstance(c.cell_contents, dict))
    del cache[functools._make_key(args, kwargs, False)]

clear_cache_value(f, 7, 4)
于 2013-05-19T17:01:09.233 に答える