python Tronado不支持流式传输大数据

时间:2020-04-23 14:01:17

标签: python flask tornado

我需要在Python rest API中流式传输巨大的oracle记录集。我在龙卷风服务器上运行烧瓶。当我使用龙卷风流式计量工作时,而在flask本机服务器(werkzeung)上,它可以完美运行。有人可以帮助我龙卷风支持流媒体吗? 这是一小段代码示例,只是尝试使用yield进行流传输。

import tornado.web
from tornado import gen, httpclient
import asyncio, json, time

class basicReuqestHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Helow World!")

class staticReuqestHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")

class StreamingHandler(tornado.web.RequestHandler):

    @gen.coroutine
    def get(self):
        self.write("starting ....")
        def stream():
            a = 1
            for i in range(100):
                a = a+i
                print(i)
                print(json.dumps(i))
                yield json.dumps(i)
        self.write(stream())
        self.write("closing...")
        self.finish()

if __name__=='__main__':
    app = tornado.web.Application([
        (r"/", basicReuqestHandler),
        (r"/myPage",staticReuqestHandler ),
        (r"/StreamTest", StreamingHandler),
    ])
    app.listen(7000)
   tornado.ioloop.IOLoop.current().start()

1 个答案:

答案 0 :(得分:0)

我弄错了,所以在这里回答我的问题可以帮助任何有类似问题的人。 这是代码:

import tornado.web
from tornado import gen, httpclient
import asyncio, json, time

class basicReuqestHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Helow World!")

class staticReuqestHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("index.html")

class StreamingHandler(tornado.web.RequestHandler):

    @gen.coroutine
    def get(self):
        self.write("starting ....")
        def stream():
            for i in range(100):
                print(i)
                print(json.dumps(i))
                self.write(json.dumps(i))
                yield self.flush()
        self.write("closing...")
        self.finish()

if __name__=='__main__':
    app = tornado.web.Application([
        (r"/", basicReuqestHandler),
        (r"/myPage",staticReuqestHandler ),
        (r"/StreamTest", StreamingHandler),
    ])
    app.listen(7000)
    tornado.ioloop.IOLoop.current().start()