繁体   English   中英

重构龙卷风请求处理程序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM