相关疑难解决方法(0)

使用简单的python生成器作为Tornado异步处理程序中的协同例程?

我有一个python生成器函数,它产生大量的文本.我想gettornado.web.RequestHandler子类编写一个方法,它将遍历生成器,在响应时将块写入响应.

因为这是Tornado,并且由于生成器可能需要一秒钟来处理,我认为使处理程序异步,使用此生成器作为协同例程并在每个块之后将控制权传递给IOLoop会很好.但是,我无法做出如何做到这一点的正面或反面.

这是我的示例(阻止)代码:

class TextHandler(web.RequestHandler):
    @web.asynchronous
    def get(self, n):
        generator = self.generate_text(100000)
        # Clearly, this will block. How to make it asynchronous?
        for text in generator:
            self.write(text)

    def generate_text(n):
        for x in xrange(n):
            if not x % 15:
                yield "FizzBuzz\n"
            elif not x % 5:
                yield "Buzz\n"
            elif not x % 3:
                yield "Fizz\n"
            else:
                yield "%s\n" % x
Run Code Online (Sandbox Code Playgroud)

如何使此处理程序异步工作?

python asynchronous generator tornado web

16
推荐指数
2
解决办法
6404
查看次数

使用gen.task和Tornado来实现简单的功能

只是尝试使用Tornado的异步函数 - 我想从我的处理程序调用一个方法,但它一直告诉我它"有一个意外的关键字参数'回调'".

class MyHandler(tornado.web.RequestHandler):

    @asynchronous
    @gen.engine
    def get(self):
        response = yield gen.Task(self.dosomething, 'argument')
        self.write(response)
        self.finish()

    def dosomething(self, myargument):
        pass
Run Code Online (Sandbox Code Playgroud)

python asynchronous tornado web

11
推荐指数
1
解决办法
8975
查看次数

标签 统计

asynchronous ×2

python ×2

tornado ×2

web ×2

generator ×1