OpenERP モジュールにいくつかの結果をキャッシュしたいので、少し掘り下げてキャッシュ デコレータを見つけました。残念ながら、私が見つけることができたほとんどのドキュメントは、クラス宣言にあります。
キャッシュする予定の関数のデコレータとして使用します Timeout: 0 = タイムアウトなし、それ以外は秒単位
誰かがこれを使用する方法の良い例を推薦できますか? 回避すべき既知の問題はありますか?
OpenERP モジュールにいくつかの結果をキャッシュしたいので、少し掘り下げてキャッシュ デコレータを見つけました。残念ながら、私が見つけることができたほとんどのドキュメントは、クラス宣言にあります。
キャッシュする予定の関数のデコレータとして使用します Timeout: 0 = タイムアウトなし、それ以外は秒単位
誰かがこれを使用する方法の良い例を推薦できますか? 回避すべき既知の問題はありますか?
さらに掘り下げた後、私が見つけた最も簡単な例はir_model_data._get_id()メソッドです。
@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]
キャッシュするモデルメソッドを選択してから、デコレータとしてキャッシュを追加するようです。このupdate()メソッドのように一部のイベントでキャッシュをクリアする必要がある場合は、キャッシュされたメソッドをキャッシュオブジェクトとして使用します。
if not result3:
self._get_id.clear_cache(cr.dbname, uid, module, xml_id)
デフォルトでは、メソッドの最初の2つのパラメーターはキャッシュ時に無視されるようです(ほとんどの場合、カーソルとユーザーID)。
これはすべて、コードのスキミングに基づいています。実際に使ってくださった方からのフィードバックをお待ちしております。
キャッシュは現在、LRU であり、無限キャッシュではないため、より使いやすくなっています。
http://bazaar.launchpad.net/~openerp/openobject-server/5.0/revision/2151
デフォルトでは、メソッドの最初の 2 つのパラメーターはキャッシュ時に無視されます (ほとんどの場合、カーソルとユーザー ID)。