lru_cache
は、キャッシュにアクセスするためのAPIを提供していないため、今後のリリースではC言語で書き直される可能性があります。キャッシュを本当に保存したい場合は、キャッシュにアクセスできる別のソリューションを使用する必要があります。
自分でキャッシュを書き込むだけで簡単です。たとえば:
>>> @cached
... def fibonacci(n):
... if n < 2:
... return n
... return fibonacci(n-1) + fibonacci(n-2)
...
>>> fibonacci(100)
354224848179261915075L
そしてcache
を取得する:あなたはその後、デコレータとしてそれを適用することができます
from functools import wraps
def cached(func):
@wraps(func)
def wrapper(*args):
try:
return func.cache[args]
except KeyError:
func.cache[args] = result = func(*args)
return result
wrapper.cache = {}
return wrapper
あなたが喜ばとして
>>> fibonacci.cache
{(32,): 2178309, (23,): 28657, ... }
その後、漬物/キャッシュをunpickle化することができますし、読み込み:
fibonacci.cache = pickle.load(cache_file_object)
は、ダンプ/ロードをlru_cache
に追加するためにpythonの問題追跡ツールで見つかりましたが、受け入れられなかった/実装されていませんでした。将来的には、lru_cache
を介してこれらの操作の組み込みサポートを組み込むことが可能になります。
注意を私のライブラリを使用することができますおそらく未来を保証するものではないでしょう。 –
@MartijnPieters:情報をありがとう。 –
'lru_cache'を避けてください。あなたの関数が 'lru_cache'を持つことが重要か、単純なキャッシュで十分ですか?それ以外の場合は、 'lru_cache'を再実装して、必要な機能を追加することができます。 – Bakuriu