时间:2021-05-22
本文实例讲述了Sanic框架流式传输操作。分享给大家供大家参考,具体如下:
简介
Sanic是一个类似Flask的Python 3.5+ Web服务器,它的写入速度非常快。除了Flask之外,Sanic还支持异步请求处理程序。这意味着你可以使用Python 3.5中新的闪亮的异步/等待语法,使你的代码非阻塞和快速。
在前面一篇《Sanic框架Cookies操作》中已经讲到,如何在Sanic中使用Cookie,接下来将介绍一下Sanic的流的使用:
请求流式传输
Sanic允许通过流获取请求数据,如下所示,当请求结束时,request.stream.get()返回为None,只有post、put和patch decorator拥有流参数:
from sanic.response import stream@app.post("/post_stream",stream=True)async def post_stream(request): async def streaming(response): while True: body = await request.stream.get() if body is None: break body = body.decode("utf-8") reponse.write(body) return stream(streaming)@app.put("/put_stream",stream=True)async def put_stream(request): async def streaming(response): while True: body = await request.stream.get() if body is None: break body = body.decode("utf-8") response.write("utf-8") return stream(streaming)除了上述例子的方法之外,我们之前还讲过用add_route方法动态添加路由:
from sanic.response import textfrom sanic.views import HTTPMethodViewfrom sanic.views import stream as stream_decoratorclass StreamView(HTTPMethodView) @stream_decorator async def post(self,request) result = '' while True: body = await request.stream.get() if body is None: break body = body.decode('utf-8') result += body return text(result)app.add_route(StreamView.as_view(),"/method_view")值得注意的是,stream_decorator装饰器中处理函数的函数名称,若为post则为post请求,若为put则为put请求。在之前讲述路由的文章《Sanic框架路由用法》中讲到一个CompositionView类来自定义一个路由,CompositionView在流式请求中同样适用:
from sanic.views import CompositionViewasync def post_stream_view(request): result = '' while True: body = await request.stream.get() if body is None: break body = body.decode('utf-8') result += body return text(result)view = CompositionView()view.add(['POST'],post_stream_view,stream=True)app.add_route(view,"/post_stream_view")响应流式传输
Sanic允许你使用stream方法将内容传输到客户端,该方法接受一个通过StreamingHTTPResponse传入的对象的协程回调,举个栗子:
from sanic.response import stream@app.route("/post_stream_info",methods=["POST"])async def post_stream_info(request): async def streaming(response): response.write("no") response.write("bug") return stream(streaming)更多关于Python相关内容可查看本站专题:《Python入门与进阶经典教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Sanic框架路由用法。分享给大家供大家参考,具体如下:前面一篇《Sanic框架安装与简单入门》简单介绍了Sanic框架的安装与基本用法,这里进一
本文实例讲述了Sanic框架Cookies操作。分享给大家供大家参考,具体如下:简介Sanic是一个类似Flask的Python3.5+Web服务器,它的写入速
前言什么是流式传输?流式传输是这一种以稳定持续流的形式传输数据的技术。流式传输的使用场景有些场景中,服务器返回的数据量较大,等待时间较长,客户端不得不等待服务器
本文实例讲述了Sanic框架安装与简单用法。分享给大家供大家参考,具体如下:Sanic是一个类似Flask的Python3.5+Web服务器,它的写入速度非常快
我们继续学习Python异步编程,这里将介绍异步Web框架sanic,为什么不是tornado?从框架的易用性来说,Flask要远远比tornado简单,可惜f