Sanic框架流式传输操作示例


Posted in Python onJuly 18, 2018

本文实例讲述了Sanic框架流式传输操作。分享给大家供大家参考,具体如下:

简介

Sanic是一个类似Flask的Python 3.5+ Web服务器,它的写入速度非常快。除了Flask之外,Sanic还支持异步请求处理程序。这意味着你可以使用Python 3.5中新的闪亮的异步/等待语法,使你的代码非阻塞和快速。

在前面一篇《Sanic框架Cookies操作》中已经讲到,如何在Sanic中使用Cookie,接下来将介绍一下Sanic的流的使用:

请求流式传输

Sanic允许通过流获取请求数据,如下所示,当请求结束时,request.stream.get()返回为None,只有postputpatch 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)

更多关于Python相关内容可查看本站专题:《Python入门与进阶经典教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python3.2中的字符串函数学习总结
Apr 23 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
在Linux系统上部署Apache+Python+Django+MySQL环境
Dec 24 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
python3.6+django2.0开发一套学员管理系统
Mar 03 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
Python list运算操作代码实例解析
Jan 20 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
Python访问Redis的详细操作
Jun 26 Python
django 发送邮件和缓存的实现代码
Jul 18 #Python
python实现linux下抓包并存库功能
Jul 18 #Python
python调用tcpdump抓包过滤的方法
Jul 18 #Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 #Python
解决Python3中的中文字符编码的问题
Jul 18 #Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 #Python
python 将print输出的内容保存到txt文件中
Jul 17 #Python
You might like
浅析PHP水印技术
2007/02/14 PHP
php面向对象全攻略 (四)构造方法与析构方法
2009/09/30 PHP
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
js 实现无缝滚动 兼容IE和FF
2009/07/15 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
Jquery根据浏览器窗口改变调整大小的方法
2017/02/07 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
jQuery的三种bind/One/Live/On事件绑定使用方法
2017/02/23 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
基于react后端渲染模板引擎noox发布使用
2018/01/11 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
Django关于admin的使用技巧和知识点
2020/02/10 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
椰子猫砂:CatSpot
2018/08/27 全球购物
德国药房apodiscounter中文官网:德国排名前三的网上药店
2019/06/03 全球购物
文秘专业毕业生就业推荐信
2013/11/08 职场文书
参观监狱心得体会
2014/01/02 职场文书
秋季运动会稿件
2014/01/30 职场文书
我爱我校演讲稿
2014/05/21 职场文书
相亲活动方案
2014/08/26 职场文书
新课培训心得体会
2014/09/03 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
申报优秀教师材料
2014/12/16 职场文书
2016年学校“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书