Давайте предположим, что я кэширую результат функции с помощью стакана, используя функцию декоратора. Результат функции, который должен быть кэширован, генерируется запросом http. Теперь проблема заключается в том, что сервер, который возвращает ответ, довольно капризный и иногда только возвращает сообщение об ошибке, либо время ожидания истекает из-за установленного времени ожидания.
Как я могу кэшировать функцию, только если сервер вернул верный ответ за определенное время c?
Это пример кода:
import time
import requests
from beaker.cache import CacheManager
from beaker.util import parse_cache_config_options
cache_opts = {
'cache.type': 'file',
'cache.data_dir': '/tmp/cache/data',
'cache.lock_dir': '/tmp/cache/lock'
}
cache = CacheManager(**parse_cache_config_options(cache_opts))
@cache.cache('my_search_func', expire=3600)
def get_results():
response = requests.request("GET", url, headers=headers, params=querystring, timeout=300)
resp = response.json()
if "DataFeed" not in resp.keys():
return resp
resp["DataFeed"][0]["Requests"] = response.url
del resp["DataFeed"][0]["Columns"]
return resp
start = time.time()
results=get_results()
end=time.time()
print(results)
print(end-start)
url
, headers
и querystring
, конечно, не определены в примере.