2016-05-12 23 views
6

Ağ işlemlerini gerçekleştiren bir yöntemle Zope yardımcı programını kullanıyorum. Bir süre geçerli olduğundan, sonucu önbelleğe almak için plone.memoize.ram kullanıyorum. Notları plone.memoize.ram ile geçersiz kılma/önleme

MyClass(object): 

    @cache(cache_key) 
    def do_auth(self, adapter, data): 
     # performing expensive network process here 

... ve önbellek fonksiyonu:

def cache_key(method, utility, data): 
    return time() // 60 * 60)) 

Ama do_auth çağrı boş sonuçları döndüğünde gerçekleşecek (veya ağ hataları yükseltmek) için Memoization engellemek istiyorlar.

plone.memoize koduna baktığımda, raise ram.DontCache() istisnasına ihtiyacım var gibi görünüyor, ancak bunu yapmadan önce eski önbelleğe alınmış değeri araştırmanın bir yoluna ihtiyacım var.

Önbelleğe alınmış verileri önbellek deposundan nasıl alabilirim?

cevap

3

Bunu yazdığım birkaç koddan yazdım ... Test edilmiyor ama size yardımcı olabilir.

Önbelleğe alınmış verilere ICacheChooser yardımcı programını kullanarak erişebilirsiniz. It çağrı yöntemi ihtiyacınız tüm detaylar olmalıdır cached_infos olarak davanıza kendisi

key = '{0}.{1}'.format(__name__, method.__name__) 
cache = getUtility(ICacheChooser)(key) 
storage = cache.ramcache._getStorage()._data 
cached_infos = storage.get(key) 

yılında, önbelleğe alınan işleve noktalı ad gerekir.

İlgili konular