2010-12-02 4 views
1

나는 Tornado 웹 서버를 사용하고 있으며 비동기 쿼리 결과를 위해 정적 캐싱을 이용하려고합니다.비동기 쿼리를 파이썬으로 캐시하는 우아한 방법?

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) 

가장 우아한 해결책 I : 신속 연속 통과를 사용하여 복잡한 도착, 그러나

@cache.wrap(ttl=60) 
def get_data(arg): 
    return do_query(arg) 

: 파이썬은 쉽게 장식을 사용하여 예를 들어, 어떤 종류의 캐시 기능을 포장 할 수 있습니다 호출 부호에 대한 가정을해야한다고 생각할 수 있습니다. 이는 항상 실용적이지는 않습니다. 누구든지 더 좋은 방법을 생각할 수 있습니까?

+0

"계속할 가치가있는 부분은 무엇입니까? 통과 "는 실제로"콜백 전달 "입니다. 지속적인 전달을 위해서는 Python이 지원하지 않는 언어 지원 계속 기능이 필요합니다. – Glyph

답변

1

Deferreds을 사용하십시오. (그러한 추상화가 부족하면 토네이도가 Twisted보다 극적으로 열세 인 이유 중 하나입니다. Cyclone을 확인해보십시오.

관련 문제