OpenERP缓存功能

时间:2010-07-05 21:02:15

标签: python caching openerp

我想在我的OpenERP模块中缓存一些结果,所以我挖了一下,发现the cache decorator。不幸的是,我能找到的大部分文档都在类声明中:

  

将它用作您计划缓存的函数的装饰器超时:0 =没有超时,否则以秒为单位

有人可以推荐一个如何使用它的好例子吗?是否存在需要避免的已知问题?

2 个答案:

答案 0 :(得分: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)

默认情况下,缓存时会忽略方法的前两个参数(大多数情况下是游标和用户ID)。

这一切都只是基于略读代码。我很乐意听到任何实际使用它的人的反馈。

答案 1 :(得分:3)

缓存当前更有用,因为它是LRU而不再是无限缓存。

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

  

默认情况下,第一个看起来像   该方法的两个参数是   缓存时忽略(游标和用户   在大多数情况下都是id。)

  1. 可以通过传递skiparg参数
  2. 来修改
  3. 被跳过的参数是隐式传递的self和cursor。当skiparg为2时,用户标识用于缓存。