1

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)

私が考えることができる最も洗練された解決策は、呼び出し署名についての仮定をすることを必要としますが、それは常に実用的であるとは限りません。誰かがもっと良い方法を考えることができますか?

4

1 に答える 1

1

延期を使用します。(そのような抽象化の欠如は、トルネードがツイストよりも劇的に劣っている理由の1つです。サイクロンにいる間にチェックアウトすることをお勧めします。)

于 2010-12-03T01:31:35.093 に答える