14

Python 3 の組み込みfunctools.lru_cacheデコレーターを使用して、いくつかの高価な関数をメモしています。あまりにも多くの値をキャッシュするとスラッシングが発生するため、メモリをあまり使用せずにできるだけ多くの呼び出しをメモしたいと考えています。

Python でこれを達成するための推奨される手法またはライブラリはありますか?

たとえば、この質問は、システム メモリを意識した LRU キャッシング用の Go ライブラリに私を導きました。Python に似たものが理想的です。


注:maxsizeいくつかのプロセスが装飾された関数を並行して呼び出すため、値ごとに使用されるメモリを推定してそれに応じて設定することはできません。ソリューションでは、空きメモリの量を実際に動的に確認する必要があります。

4

1 に答える 1

19

組み込みlru_cacheを使用するように変更することになりましたpsutil

変更されたデコレータは、追加のオプション引数を取りますuse_memory_up_touse_memory_up_to設定されている場合、 ( に従って) 使用可能なメモリがバイトよりも少ない場合、キャッシュがいっぱいであると見なされpsutil.virtual_memory().availableます。例えば:

from .lru_cache import lru_cache

GB = 1024**3

@lru_cache(use_memory_up_to=(1 * GB))
def expensive_func(args):
    ...

注:設定しても効果はありuse_memory_up_toませmaxsizeん。

コードは次のとおりです。lru_cache.py

于 2014-05-05T21:05:28.890 に答える