【发布时间】: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 这样的生成器。