lru_cache
キャッシュにアクセスするための API が提供されておらず、将来のリリースで C で書き直される可能性があるため、を使用して必要なことを行うことはできません。本当にキャッシュを保存したい場合は、キャッシュにアクセスできる別のソリューションを使用する必要があります。
自分でキャッシュを書き込むのは簡単です。例えば:
from functools import wraps
def cached(func):
func.cache = {}
@wraps(func)
def wrapper(*args):
try:
return func.cache[args]
except KeyError:
func.cache[args] = result = func(*args)
return result
return wrapper
その後、デコレータとして適用できます。
>>> @cached
... def fibonacci(n):
... if n < 2:
... return n
... return fibonacci(n-1) + fibonacci(n-2)
...
>>> fibonacci(100)
354224848179261915075L
そして、以下を取得しますcache
。
>>> fibonacci.cache
{(32,): 2178309, (23,): 28657, ... }
次に、キャッシュを好きなようにピクル/ピクル解除して、次のようにロードできます。
fibonacci.cache = pickle.load(cache_file_object)
にダンプ/ロードを追加するという機能リクエストが Python の問題トラッカーで見つかりましたlru_cache
が、受け入れられず、実装もされませんでした。将来的には、これらの操作を を介して組み込みでサポートできるようになるかもしれませんlru_cache
。