本篇文章给大家分享的是有关使用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 text
from sanic.views import HTTPMethodView
from sanic.views import stream as stream_decorator
class 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 CompositionView
async 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)以上就是使用Sanic框架怎么实现一个流式传输操作,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联成都网站设计公司行业资讯频道。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享名称:使用Sanic框架怎么实现一个流式传输操作-创新互联
转载注明:http://www.jxjierui.cn/article/dosdhd.html


咨询
建站咨询
