我想在OpenERP模块中缓存一些结果,所以我挖了一下,发现the cache decorator。不幸的是,大多数文档我已经能够找到的是在类声明:OpenERP缓存功能
使用它作为您打算缓存超时功能的装饰:0 =无超时,否则秒
任何人都可以推荐一个如何使用它的好例子吗?有没有已知的问题需要避免?
我想在OpenERP模块中缓存一些结果,所以我挖了一下,发现the cache decorator。不幸的是,大多数文档我已经能够找到的是在类声明:OpenERP缓存功能
使用它作为您打算缓存超时功能的装饰:0 =无超时,否则秒
任何人都可以推荐一个如何使用它的好例子吗?有没有已知的问题需要避免?
周围的一些更挖掘后,我发现最简单的例子是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模型方法。缓存(光标和用户ID时
if not result3:
self._get_id.clear_cache(cr.dbname, uid, module, xml_id)
它看起来像在默认情况下,该方法的前两个参数将被忽略:如果某些事件应清除缓存像this update() method,您使用缓存的方法作为缓存对象在大多数情况下)。
这都是基于略读代码。我很乐意听到任何实际使用过它的人的反馈。
缓存当前更易于使用,因为它是LRU而不是无限的缓存了。
http://bazaar.launchpad.net/~openerp/openobject-server/5.0/revision/2151
它看起来像默认情况下,方法的第一 两个参数是 缓存(在大多数情况下光标和用户 ID)时忽略。
在7.0(不确定其他)中,'multi'和'timeout'参数被忽略。另外,传递小于'2'的'skiparg'会导致不理想的结果。 – 2015-11-02 22:42:09