Декоратор memoize
Декоратор memoize применяется к функциям
и сохраняет результат их выполнения в кеше.
При повторном вызове с теми же аргументами
функция не выполняется заново - возвращается
сохранённое значение. Первым параметром
передаётся время жизни кеша timeout
в секундах, вторым - префикс ключа
key_prefix.
Синтаксис
@cache.memoize(timeout, key_prefix)
Пример
Давайте закешируем результат функции, складывающей два числа:
from flask import Flask
from flask_caching import Cache
app = Flask(__name__)
app.config['CACHE_TYPE'] = 'simple'
cache = Cache(app)
@cache.memoize(timeout=50)
def add(a, b):
return a + b
@app.route('/')
def index():
res = add(1, 2)
return str(res)
Результат выполнения кода:
3
Пример
Давайте убедимся, что при повторном вызове с теми же аргументами функция не выполняется:
from flask import Flask
from flask_caching import Cache
app = Flask(__name__)
app.config['CACHE_TYPE'] = 'simple'
cache = Cache(app)
@cache.memoize(timeout=50)
def greet(name):
print('function called')
return 'hello ' + name
@app.route('/')
def index():
res1 = greet('user')
res2 = greet('user')
return res2
В консоли строка 'function called'
выведется только один раз, так как второй
вызов берёт значение из кеша.
Результат выполнения кода:
hello user
Пример
Давайте зададим префикс ключа, чтобы различать кеш разных функций:
from flask import Flask
from flask_caching import Cache
app = Flask(__name__)
app.config['CACHE_TYPE'] = 'simple'
cache = Cache(app)
@cache.memoize(timeout=50, key_prefix='my_prefix')
def get_value(x):
return x * 2
@app.route('/')
def index():
res = get_value(5)
return str(res)
Результат выполнения кода:
10