首页 > 解决方案 > python Tronado不支持流式传输大量数据

问题描述

我需要在 Python REST API 中流式传输巨大的 Oracle 记录集。我在龙卷风服务器上运行烧瓶。当我使用龙卷风流式剂量工作时,而在烧瓶本机服务器(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()

标签: pythonflasktornado

解决方案


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

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()

推荐阅读