首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >龙卷风: BaseHandler.write阻塞了吗?

龙卷风: BaseHandler.write阻塞了吗?
EN

Stack Overflow用户
提问于 2013-12-23 14:30:28
回答 2查看 252关注 0票数 1

我有两个请求者。一个提供大量的auf数据,另一个只提供几个数据集。

代码语言:javascript
复制
class HugeQueryHandler(BaseHandler):
    @gen.coroutine
    def get(self):
        try:
            cursor = yield momoko.Op(self.db.execute, 'SELECT * FROM huge_table;')
            for row in cursor:
                self.write('Query results: {} <br />'.format(row))
        except Exception as error:
            self.write(str(error))

        self.finish()

代码语言:javascript
复制
class SmallQueryHandler(BaseHandler):

    @gen.coroutine
    def get(self):
        try:
            cursor = yield momoko.Op(self.db.execute, 'SELECT * FROM small_table;')
            for row in cursor:
                self.write('Query results: {} <br />'.format(row))
        except Exception as error:
            self.write(str(error))

        self.finish()

我的问题

响应循环阻塞吗?当我在调用大型处理程序之后请求少量数据时,我必须等待,等待第一个数据完成.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-23 18:45:32

write()不会阻塞网络(它只是附加到缓冲区),但是您不会在任何地方产生结果,所以在任何其他任务能够运行之前,整个循环必须运行到完成。我认为问题不是写问题,而是迭代--“行在光标中”不会产生结果,所以momoko在内存中缓冲了整个结果集,或者在从数据库读取时阻塞了。如果是后者,则需要以非阻塞方式访问游标。如果是前者,那么除了将查询分解成更小的块之外,您可能没有什么可以做的。(在循环期间,您可以偶尔调用“gen.Task(self.flush)”,但这会延长内存中缓冲全部数量的时间,因此可能不可取)。

票数 0
EN

Stack Overflow用户

发布于 2013-12-23 23:21:11

所以,这就是重点。for循环需要完成。

这种方法是怎么回事?

代码语言:javascript
复制
class HugeQueryHandler(BaseHandler):

    executor = tornado.concurrent.futures.ThreadPoolExecutor(1)

    @tornado.concurrent.run_on_executor
    def generate_response(self, cursor):
        return "<br />".join("{}".format(row) for row in cursor)

    @tornado.web.asynchronous
    @gen.engine
    def get(self):
        try:
            cursor = yield momoko.Op(self.db.execute, 'SELECT * FROM huge_table;')
            res = yield self.generate_response(cursor)
            self.write(res)
        except Exception as error:
            self.write(str(error))
        self.finish()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20745563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档