2011-01-25 13 views
2

私はビーカーキャッシュデコレータで装飾された機能を持っています。この関数は、メインアプリケーションにインポートされるモジュール内にあります。ビーカーキャッシュが'cache.type': 'memory'で構成されてビーカーキャッシュを無効にする方法は?

def new_item(): 
    cache.invalidate(my_cached_function, 'namespace') 

ので:、私はキャッシュを無効にしようと、別の関数で

def index(): 
    data = my_cached_function() # no args 

from caching import cache, my_cached_function 

今、1つの関数に私が装飾された機能を使用しました私も試みました:

def new_item(): 
    cache.invalidate(my_cached_function, 'namespace', type='memory') 

私はここで何が間違っていますか?

NOTES典型的なシナリオでは

、I)は、(ほとんどの時間をインデックスを呼び出します。 new_item()が呼び出されるたびにキャッシュをクリアして、new_item()関数で作成された新しい項目をindex()呼び出しで考慮します。

問題のアプリケーションは、ボトルフレームワークの上で動作するWebアプリケーションです。

答えて

2

の前にmy_cached_functionが呼び出される前に無効にする必要があります。例については、beaker.cache.CacheManager documentationを参照してください。

+0

理論的にはmy_cached_functionの前に呼び出されます。ユーザーが新しい項目を作成すると、キャッシュを無効にするはずのnew_item()関数が呼び出されます。次に、彼は装飾された機能が呼び出されるインデックスページにアクセスします。インデックスページには新しいアイテムを含むアイテムのリストが表示されるはずですが、そうではありません。 – hayavuk

+0

ああ、別のメモ。キャッシュは無効にしても機能しません。私は無効化を強制するだけです。 – hayavuk

+0

'new_item'でキャッシュを無効にするのではなく、' should_invalidate_item_cache'のようなキーをセッションで 'True'に設定し、' index'でその値がTrueであれば無効にしてみてください。 (これはちょうど推測であり、テストされていません) –

関連する問題