2010-07-05 4 views
3

Я хочу кэшировать некоторые результаты в моем модуле OpenERP, поэтому я немного вырыл и нашел the cache decorator. К сожалению, большинство документации я смог найти в объявлении класса:Функции кеша OpenERP

использовать его в качестве декоратора функции вы планируете кэшировать тайм-аута: 0 = нет тайм-аут, в противном случае в секундах

Может ли кто-нибудь рекомендовать хороший пример того, как это использовать? Известны ли проблемы, которых следует избегать?

+0

В 7.0 (не уверенный в других) параметры 'multi' и' timeout' игнорируются. Кроме того, передача «skiparg» менее чем «2» даст нежелательные результаты. –

ответ

5

После покопаться еще, самый простой пример, я нашел это ir_model_data._get_id() method:

@tools.cache() 
def _get_id(self, cr, uid, module, xml_id): 
    ids = self.search(cr, uid, [('module','=',module),('name','=', xml_id)]) 
    if not ids: 
     raise ValueError('No references to %s.%s' % (module, xml_id)) 
    # the sql constraints ensure us we have only one result 
    return ids[0] 

Похоже, вы просто выбираете метод модели вы хотите кэшировать, а затем добавить в кэш, как a decorator. Если какое-то событие должно очистить кэш, как this update() method, использовать кэшированный метод как объект кэша:

  if not result3: 
       self._get_id.clear_cache(cr.dbname, uid, module, xml_id) 

Это выглядит по умолчанию, первые два параметра метода игнорируется при кэшировании (курсора и идентификатора пользователя в большинство случаев).

Все это просто основано на снятии кода. Мне бы очень хотелось услышать отзывы от тех, кто на самом деле их использовал.

3

Кэш в настоящее время более удобен, поскольку LRU, а не бесконечный кеш.

http://bazaar.launchpad.net/~openerp/openobject-server/5.0/revision/2151

Похоже, по умолчанию, первые два параметра метода игнорируются при кэшировании (курсор и пользователь идентификатор в большинстве случаев).

  1. это может быть модифицирован путем прохождения skiparg параметра
  2. аргументы пропуску являются неявно передается себя и курсор. Идентификатор пользователя используется при кешировании, когда skiparg равен 2.

 Смежные вопросы

  • Нет связанных вопросов^_^