Мне нужно кэшировать некоторые сгенерированные файлы HTML, чтобы ускорить процесс просмотра моего веб-сервиса. Я знаю, какая информация может быть кэширована, а какие нет, но я борюсь с реализацией.Кэшированные HTML-страницы, созданные Bottle
Я думал о декоратор, как это:
cache = {}
def cached(c):
if c not in cache:
cache[c] = {}
def cached_wrapper(func):
def inner(*args, **kwargs):
if args[0] in cache[c]:
print("Cache hit --> %s" %cache[c][args[0]])
else:
cache[c][args[0]] = func(*args, **kwargs)
return cache[c][args[0]]
return inner
return cached_wrapper
@route("/some/file/<id>")
@cached("some-cache")
def get_some_file(id):
# templating goes here...
return "[...]"
, где для этого примера хранения является словарь, но может легко распространяться на файл на основе хранения или базы данных.
Но вопрос в том, что это действительно хорошая идея? Как я могу реализовать кеш для файлов лучше или проще?
Я не хочу использовать другие службы перед кодом python, потому что приложение должно работать автономно.
Для большей гибкости вы можете посмотреть что-то вроде [dogpile.cache] (https://bitbucket.org/zzzeek/dogpile.cache/). – larsks