Кеширование со стаканом

У меня есть программа, которая очищает сайт для данных. Я хочу иметь возможность кэшировать эти данные вместо того, чтобы загружать их, если прошло всего несколько минут с момента их последнего извлечения. Я посмотрел на стакан, но я очень плохо знаком с кешем и не уверен, что это то, что мне нужно. Я также не очень понимаю, что такое Cachemanager и почему я использую только "cache.get" вместо того, чтобы использовать "cache.set" и "cache.get". Я включил сценарий, который я использовал для тестирования.

from beaker.cache import CacheManager
from beaker.util import parse_cache_config_options
import sched, time
from datetime import datetime

cache_opts = {
             'cache.type': 'file',
             'cache.data_dir': '../Beaker/tmp/cache/data',
             'cache.lock_dir': '../Beaker/tmp/cache/lock'
             }

cache = CacheManager(**parse_cache_config_options(cache_opts))
tmpl_cache = cache.get_cache('mytemplate', type='file', expire=5)

def get_results():
    # do something to retrieve data
    print 'hey'
    data = datetime.now()
    return data

def get_results2():
    return 'askdjfla;j'

s = sched.scheduler(time.time, time.sleep)
def get_time(sc):     
    results = tmpl_cache.get(key='gophers', createfunc=get_results)    
    results2 = tmpl_cache.get(key='hank', createfunc=get_results2)   
    print results,results2
    sc.enter(1, 1, get_time, (sc,))

s.enter(1, 1, get_time, (s,))
s.run()

Я иду об этом правильным путем?

1 ответ

Вы используете только cache.get, и это правильно, потому что если он не найден в кеше, он вызовет функцию для его создания. Это становится понятнее и проще, если вы вместо этого используете API декоратора:

@cache.cache('gophers', expire=3600)
def get_results():
    # do something to retrieve data
    print 'hey'
    data = datetime.now()
    return data

@cache.cache('hank', expire=3600)
def get_results2():
    return 'askdjfla;j'

s = sched.scheduler(time.time, time.sleep)
def get_time(sc):     
    results = get_results()
    results2 = get_results2()
    print results,results2
    sc.enter(1, 1, get_time, (sc,))
Другие вопросы по тегам