У меня есть несколько классов следующей структуры:
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):
...
Каков наилучший подход?