キャッシュ・デコレーターは関数の戻り値をキャッシュする便利なメソッドです。
以下のように記述すると動作します。:
@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"