現在、pyfscacheを使用してカスタムディレクトリにキャッシュを作成し、ストレージの長さを制限しています。ここに私の現在のコードは次のとおりです。関数パラメータに基づいてキャッシュを動的に設定するPythonデコレータ
Import pyfscache
Import pandas as pd
def cache_one_day(func):
years = 0
days = 1
cache = pyfscache.FSCache(CACHE_DIRECTORY, years=years, days=1)
return cache(func)
@cache_one_day
def get_data(year):
columns = [str(year), str(year + 1), str(year + 2)]
data = [1, 2, 3]
df = pd.DataFrame(data, columns=columns)
return df
私はさらにget_dataのための年のパラメータに基づいてキャッシュ時間制限を変更したいと思います。たとえば、年が2017の場合は、データを頻繁にリフレッシュし、日数= 1に設定します(図のように)。しかし、年が2015年の場合は、データが変更されないことを既に知っており、年が99のアーカイブを作成することをお勧めします。
get_data関数にif文を書くことはできますが、私はこのロジックを使用したい唯一の機能です。したがって、私はむしろ何か他のものを使用したいと思います。クラスのデコレータと階層化されたデコレータを調べて、それぞれを書き込もうとしましたが、エラーが発生します。たとえば、このコード:
class my_decorator(object):
def __init__(self, view_func):
self._years = 0
self._seconds = 0
self.view_func = view_func
wraps(view_func)(self)
def __call__(self, request, *args, **kwargs):
if request == 2017:
self._seconds = 1
else:
self._years = 1
cache = pyfscache.FSCache(CACHE_DIRECTORY, years=self._years,
seconds=self._seconds)
return cache(self.view_func(request, *args, **kwargs))
戻っ 'DATAFRAME' オブジェクトには属性 '名'
どれ指針を持っていませんか?
私はこれを試してみましたが、それは私の道のpyfscache作品との誤差を与えていました。私は自分のキャッシュシステムを書くことに目を向けなければならないだろう。 – exballer