2016-05-12 24 views
6

Tôi và tiện ích Zope với phương thức thực hiện quy trình mạng. Do kết quả của nó có giá trị trong một thời gian, tôi đang sử dụng plone.memoize.ram để lưu trữ kết quả.Vô hiệu hóa/ngăn chặn ghi nhớ với plone.memoize.ram

MyClass(object): 

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

... và các chức năng bộ nhớ cache:

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

Nhưng tôi muốn để ngăn chặn sự memoization sẽ diễn ra khi cuộc gọi do_auth trả về kết quả rỗng (hoặc tăng lỗi mạng).

Nhìn vào mã plone.memoize có vẻ như tôi cần raise ram.DontCache() ngoại lệ, nhưng trước khi thực hiện việc này, tôi cần một cách để điều tra giá trị được lưu trong bộ nhớ cache cũ.

Làm cách nào để lấy dữ liệu được lưu trong bộ nhớ cache từ bộ nhớ cache?

Trả lời

3

Tôi kết hợp với nhau từ một số mã tôi đã viết ... Nó không được kiểm tra nhưng có thể giúp bạn.

Bạn có thể truy cập dữ liệu được lưu trong bộ nhớ cache bằng tiện ích ICacheChooser. Đó là gọi phương thức cần tên rải rác đến chức năng bạn lưu trữ, trong trường hợp bạn tự

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

Trong cached_infos nên có tất cả các infos bạn cần.

Các vấn đề liên quan