【问题标题】:python Tronado not supporting streaming huge datapython Tronado 不支持流式传输大量数据
【发布时间】:2020-04-23 14:01:17
【问题描述】:

我需要在 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()

【问题讨论】:

  • 请给我们一些代码...
  • 根据您读取/处理源数据的方式,您可能会阻塞 Tornado 的 IOLoop。
  • 请查看示例代码。我无法流式传输响应,我作为示例给出的范围只是考虑像 db cursor 这样的生成器。

标签: python flask tornado


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-06
    • 2010-11-30
    • 1970-01-01
    • 2012-06-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2014-12-03
    相关资源
    最近更新 更多