Python関数をキャッシュする


任意のコードをスピードアップする最も簡単な方法は以下のコードを実行することです.repativeな仕事の量を減らす一般的なテクニックはキャッシュを実装することです、次のように、あなたが同じ仕事をする必要があるとき、あなたは単にキャッシュからそれを得ることができる何かを再計算する必要はありません.

Lruchenキャッシュ


Pythonでのセットアップに最も簡単で最も一般的なのは組み込み機能ツールです.Lruhyキャッシュ.
from functools import lru_cache

@lru_cache
def get_cars():
    print('pulling cars data')
    return pd.read_csv("https://waylonwalker.com/cars.csv", storage_options = {'User-Agent': 'Mozilla/5.0'})

LruRageキャッシュを使うとき


関数がいつでも同じ結果を期待する関数があるときは、同じ入力を使って呼び出されます.

when same *args, **kwargs always return the same value


Lrughtキャッシュは、1つのPythonプロセスだけで動作します.複数のサブプロセスを実行している場合や、同じスクリプトを何度も実行している場合は、LRuRagキャッシュは動作しません.

lru_cache only caches in a single python process


最大サイズ


オプションのパラメータを取ることができます.maxsize キャッシュのサイズを設定します.デフォルトでは128 , 複数のアイテムをキャッシュに格納する場合は、この値を調整できます.
The get_cars 例はユニークなもののビットです.ポイントは、この実装はSingletonのように振る舞っているので、私たちは、その値を1に設定することによって、私たちがそれに何を持っているかを正確に割り当てることによって、キャッシュのサイズを最適化することができます.
from functools import lru_cache

@lru_cache(maxsize=1)
def get_cars():
    print('pulling cars data')
    return pd.read_csv("https://waylonwalker.com/cars.csv", storage_options = {'User-Agent': 'Mozilla/5.0'})

私の例は少しルールを広げます


上の例はWebリクエストです.データエンジニアとして、私はしばしば、短い時間のために走るスクリプトを書きます.この関数の出力がこのジョブの実行中に変更されることを期待していません.

web request do change their output


私がwebappsまたは長い間走っていた若干の種類のプロセスを構築しているならば.何かが起動し、仕事を待つ、これはLruRageキャッシュの良いアプリケーションではない可能性があります.このプロセスが数日または数ヶ月実行されている場合、リクエストが変更されないという仮定はもはや有効ではありません.

また、LruchenキャッシュのためのタイプKwargもあります


これは私にとって新しいですが、値だけでなく値を入力できます.

(from the docstring)
If typed is True, arguments of different types will be cached separately.
For example, f(3.0) and f(3) will be treated as distinct calls with distinct
results.