Tornado Webサーバーを使用していて、非同期クエリ結果に静的キャッシュを利用したいと考えています。Pythonを使用すると、たとえばデコレータを使用して、ある種のキャッシュで関数を簡単にラップできます。
@cache.wrap(ttl=60)
def get_data(arg):
return do_query(arg)
ただし、継続渡しを使用するとすぐに複雑になります。
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)
私が考えることができる最も洗練された解決策は、呼び出し署名についての仮定をすることを必要としますが、それは常に実用的であるとは限りません。誰かがもっと良い方法を考えることができますか?