[英]Refactoring a Tornado Request Handler
因此,我重复了我对许多GET所做的代码-检查响应是否先前已缓存,如果有响应,则将其返回。
我想要开始工作的代码如下所示:
class Handler(web.RequestHandler):
@gen.coroutine
def get_cache(self):
try:
response = yield gen.Task(get_redis)
except:
logging.log()
if response:
self.finish(response)
raise gen.Return()
@gen.coroutine
@asynchronous
def get(self):
self.get_cache()
response = do_sql_get()
self.set_cache(key, response)
self.finish(response)
现在发生的是,如果存在,它将获取缓存,但是会继续运行self.get
的其余代码。 这样做对我来说很有意义,但是我不确定如何在self.get_cache
方法中调用self.finish
立即停止重构,以正确地重构它。
get_cache
应该返回一个值,该值指示它是否完成了请求(或者应该返回缓存的数据并将其留给调用方以完成请求)。 我将执行以下操作之一:
@gen.coroutine
def serve_from_cache(self):
response = yield gen.Task(get_redis)
if response:
self.finish(response)
raise gen.Return(True)
else:
raise gen.Return(False)
@gen.coroutine
def get(self):
if (yield self.serve_from_cache()):
return
# do work
yield self.set_cache(...)
要么
@gen.coroutine
def get_cache(self):
return yield gen.Task(get_redis)
@gen.coroutine
def get(self):
resp = yield self.get_cache()
if resp:
self.finish(resp)
return
# do work...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.