Python 在龙卷风中,如何';装饰';一个协程GET函数
我想修饰getcoroutine方法,该方法确定是否需要从缓存中读取数据并将数据设置为缓存。但我不知道如何包装一个合作项目。我现在是这样做的:Python 在龙卷风中,如何';装饰';一个协程GET函数,python,tornado,coroutine,python-decorators,Python,Tornado,Coroutine,Python Decorators,我想修饰getcoroutine方法,该方法确定是否需要从缓存中读取数据并将数据设置为缓存。但我不知道如何包装一个合作项目。我现在是这样做的: def cache_it(f): @functools.wraps(f) @coroutine def wrapper(self, *args, **kwargs): key = self.get_cache_key() result = cache.get(key) if not
def cache_it(f):
@functools.wraps(f)
@coroutine
def wrapper(self, *args, **kwargs):
key = self.get_cache_key()
result = cache.get(key)
if not result:
yield f(self, *args, **kwargs)
if self._result_buffer:
cache.set(key, self._result_buffer)
else:
self._result_buffer = result
class BaseHandler(RequestHandler):
def __init__(self, *args, **kwargs):
super(BaseHandler, self).__init__(*args, **kwargs)
self._result_buffer = []
def write(self, chunk):
self._result_buffer.append(chunk)
def flush(self, include_footers=False, callback=None):
self._flush_result_buffer()
super(BaseHandler, self).flush(include_footers)
def finish(self, chunk=None):
if chunk is not None:
self.write(chunk)
self._flush_result_buffer()
super(BaseHandler, self).finish()
def _flush_result_buffer(self):
for r in self._result_buffer:
super(BaseHandler, self).write(r)
self._result_buffer = []
class IndexHandler(RequestHandler):
@cache_it
@coroutine
def get(self):
...
self.write({'data': data})
但它不起作用。请告诉我怎么做,我错在哪里。Af首先。
协同程序应该是固定的(只需添加返回):
这里也应该是固定的:
class IndexHandler(BaseHandler):
现在您可以缓存结果缓冲区(注意:它是列表)。Hi@sinceq,它现在可以工作了,但是现在我遇到了异步memcache操作的另一个问题。我试过了,但我不知道如何在coroutine(缓存中的包装器函数)中使用它
class IndexHandler(BaseHandler):