Сначала вам нужен объект кеша.Диктовка - отличный вариант.
cachetpl = {}
lastupdated = time.time()
cache = Cache()
Затем создайте класс для обработки содержимого в вашем файле:
class Cache(object):
def __init__(self):
global lastupdated
self.lastupdated = lastupdated
global cachetpl
self.cachetpl = cachetpl
def keys(self):
return self.cachetpl.keys()
def lastupdate(self):
return self.lastupdate
def meta(self, clienthash, zipcode=None):
return self.cachetpl[clienthash]
Затем вам нужно настроить импульс для проверки изменений, возможно, проверяя последний обновленный столбец вашего хранилища SQL.
@staticmethod
def update():
global cachetpl
global lastupdated
if not cachetpl:
return None, None
PSQL = ''' SELECT key, meta FROM schema.table WHERE lastupdated >= %s '''
changes = db.fetchall(PSQL, lastupdated)
if changes:
numchange = len(changes)
for x in changes:
cachetpl[x[0]] = x[1]
lastupdated = time.time()
return len(cachetpl), numchange
else:
lastupdated = nz.now()
return None, None
Как настроить этот импульс, зависит от вас.Я использую библиотеку Python scheduler
и использую gevent для моего приложения для асинхронного.Работает потрясающе.
Теперь вы просто звоните своему классу Cache()
и кормите его любыми данными, которые хотите.Я предлагаю, чтобы вместо возврата шаблона вы сначала сохранили его в своей базе данных, а затем вернули его.Пусть вызов к маршруту проверяет наличие кэшированной версии перед ее рендерингом.Затем вы можете изменить обновление, чтобы отображать страницы в фоновом режиме, если данные изменяются, поэтому следующий вызов кеша - это новые данные.