キャッシュ・デコレーター

はじめに

キャッシュ・デコレーターは関数の戻り値をキャッシュする便利なメソッドです。

以下のように記述すると動作します。:

@cache_this_function
def my_slow_function():
     # 以下のコードは一度だけ実行されて、以降はキャッシュから値を取得します
     return

plone.memoize パッケージは結果をキャッシュする補助をするデコレーター機能を提供します。

プロセスライフサイクルの間のキャッシュの結果

例:

from plone.memoize import forever

@forever.memoize
def getFields(area, subject):
    """ Get all fields inside area / subject.

    Results is cached for process lifetime.

    @return: List of internal fields
    """
    schema = getSchema(area)
    return [ field for field in schema if field["subject"] == subject ]

リクエストごとのキャッシュ

これは同じ view やユーティリティーを同一の HTTP リクエストでの異なるソースからたくさん呼ばれるときに有効な手段です。

plone.memoize.view パッケージは BrowserView をベースとしたクラスに必要なデコレーターを提供します。

from plone.memoize.view import memoize, memoize_contextless

class MyView(BrowserView):


    @memoize
    def getValue():
        """ この値はリクエスト単位の BrowserView コンテクストごとに再計算されます """
        return "something"

    @memoize_contextless
    def getValueNoContext():
        """ この値はリクエスト単位のすべてのコンテクストで再計算されます """
        return "something"