次の構造の複数のクラスがあります。
class Thing(Base):
id = Column(Integer, primary_key=True)
@cache_region('short_term', 'get_children')
def get_children(self, childrentype=None):
return DBSession.query()...
ただし、問題は、ビーカーが自分自身に関係なく同じ領域にget_children()をキャッシュし、キャッシュを無意味にすることです。ハックは次のとおりです。
def get_children(self, id, childrentype=None):
...
children = thing.get_children(thing.id, 'asdf')
しかし、メソッドを呼び出すたびにThing.idを渡すのは、見苦しいだけです。cache.regionをデコレータとしてではなく通常の関数として使用したいと思っていますが、それに関するドキュメントが見つかりません。次のようなもの:
def get_children(self, childrentype=None):
if "cached in cache_region(Thing.get_children, 'short_term', 'get_children', self.id, childrentype)":
return "the cache"
else:
query = DBSession.query()...
"cache query in cache_region(Thing.get_children', 'short_term', 'get_children', self.id, childrentype)"
return query
またはさらに素晴らしいのは次のようなものです:
@cache_region('short_term', 'get_children', self.id)
def get_children(self, childrentype=None):
...
最善のアプローチは何ですか?