façon élégante de mettre en cache la requête asynchrone en Python?
-
30-09-2019 - |
Question
J'utilise le serveur web Tornado et que vous voulez profiter de la mise en cache statique pour un résultat de requête asynchrone. Python, il est facile d'envelopper une fonction avec un cache de quelque sorte, par exemple en utilisant un décorateur:
@cache.wrap(ttl=60)
def get_data(arg):
return do_query(arg)
Cependant, il devient rapidement complexe en utilisant le passage de continuation:
def wrap_static_result(key, result, callback, ttl):
cache.set(key, result, ttl)
callback(result)
def get_data(arg, callback):
cached = cache.get(arg)
if cached:
callback(cached)
else:
callback2 = lambda result: wrap_static_result(arg, result, callback, ttl=60)
do_async_query(arg, callback2)
La solution la plus élégante, je peux penser à faire des suppositions au sujet exige des signatures d'appel, ce qui est pas toujours pratique. Quelqu'un peut-il penser à une façon plus agréable?
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow