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

使用延迟。(缺乏这种抽象是 Tornado 明显不如 Twisted 的原因之一。您可能想在使用Cyclone时查看它。)

于 2010-12-03T01:31:35.093 回答