3

OpenERP モジュールにいくつかの結果をキャッシュしたいので、少し掘り下げてキャッシュ デコレータを見つけました。残念ながら、私が見つけることができたほとんどのドキュメントは、クラス宣言にあります。

キャッシュする予定の関数のデコレータとして使用します Timeout: 0 = タイムアウトなし、それ以外は秒単位

誰かがこれを使用する方法の良い例を推薦できますか? 回避すべき既知の問題はありますか?

4

2 に答える 2

5

さらに掘り下げた後、私が見つけた最も簡単な例は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)。

これはすべて、コードのスキミングに基づいています。実際に使ってくださった方からのフィードバックをお待ちしております。

于 2010-07-05T21:17:18.107 に答える
3

キャッシュは現在、LRU であり、無限キャッシュではないため、より使いやすくなっています。

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

デフォルトでは、メソッドの最初の 2 つのパラメーターはキャッシュ時に無視されます (ほとんどの場合、カーソルとユーザー ID)。

  1. これは skiparg パラメータを渡すことで変更できます
  2. スキップされる引数は、暗黙的に渡された自己とカーソルです。skiparg が 2 の場合、ユーザー ID はキャッシングで使用されます。
于 2011-03-24T17:20:43.040 に答える