2010-12-02 10 views
1

私はTornado Webサーバーを使用しており、非同期クエリ結果の静的キャッシングを利用したいと考えています。 Pythonはデコレータを使用して、たとえば、ある種のキャッシュを持つ関数をラップすることが容易になります:非同期クエリを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) 

最もエレガントな解決策私は、コールシグネチャについての前提を作る必要があると考えることができますが、これは必ずしも実用的ではありません。誰かがより良い方法を考えることができますか?

+0

「継続ここで「渡す」は実際には「コールバックを渡す」ことです。継続的に渡すには、Pythonが(最低限ではなく)言語サポートを継続する必要があります。 – Glyph

答えて

1

Deferredsを使用してください。 (そのような抽象化の欠如は、竜巻がTwistedに比べて劇的に劣っている理由の1つです。

関連する問題