繁体   English   中英

在哪里为RequestHandler缓存内容?

[英]where to cache stuff for RequestHandler?

我打算使用龙卷风编写一个实现自动完成服务的处理程序,如下所示:

class AutoCompleteHandler(tornado.web.RequestHandler):

    def initialize(self, indexbuilder):
        self.indexbuilder = indexbuilder
        self.index = indexbuilder.build_merged_index()

    def get(self):

        query = self.get_argument('q')

        result = self.index[query]

        self.set_header("Content-Type", 'application/json;')
        self.set_header('charset', "utf-8")
        self.write(json.dumps(result))

事实和要求

  • wordtreebuilder.build_merged_index是一种非常慢的方法,计划每24小时运行一次以刷新索引列表。
  • 根据龙卷风文档, 将在每个request上创建一个新的RequestHandler对象 因此,将treebuilder作为实例属性对我不起作用。

问题

简而言之,我该怎么做?

我应该在哪里缓存索引,但仍然具有龙卷风的非阻塞功能? (我猜)我可以将indexbuilder放在与AutoCompleteHandler相同的模块下,并将索引构建为全局变量,并生成一个单独的线程来执行刷新任务,但这在我看来并不正确,我认为这项工作可以使用龙卷风可以使结构更优雅。

全局变量听起来对我来说是最好/最简单的解决方案。 您还可以将其附加到Application对象(如果希望避免使用全局对象,可以在RequestHandlerself.application进行访问。也可以将其缓存在indexbuilder本身上,或者在initialize dict中传递一些缓存对象。

无论如何,您可能希望在单独的线程中进行刷新,以避免在IOLoop运行时阻塞它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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