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 相关文章推荐
星球大战与Python之间的那些事
Jan 07 Python
python去掉行尾的换行符方法
Jan 04 Python
python交互式图形编程实例(二)
Nov 17 Python
selenium+python实现自动化登录的方法
Sep 04 Python
python使用插值法画出平滑曲线
Dec 15 Python
python实现二级登陆菜单及安装过程
Jun 21 Python
opencv3/C++ 平面对象识别&透视变换方式
Dec 11 Python
python关闭占用端口方式
Dec 17 Python
pytorch中的卷积和池化计算方式详解
Jan 03 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
如何使用selenium和requests组合实现登录页面
Feb 03 Python
python 通过文件夹导入包的操作
Jun 01 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实现上传图片保存到数据库的方法
2015/02/11 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
Thinkphp开发--集成极光推送
2017/09/15 PHP
javascript跨域的4种方法和原理详解
2014/04/08 Javascript
JavaScript strike方法入门实例(给字符串加上删除线)
2014/10/17 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
javascript中 try catch用法
2015/08/16 Javascript
关于AngularJs数据的本地存储详解
2017/01/20 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
Three.js 再探 - 写一个微信跳一跳极简版游戏
2018/01/04 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
Python实现ssh批量登录并执行命令
2016/10/25 Python
python万年历实现代码 含运行结果
2017/05/20 Python
在VS2017中用C#调用python脚本的实现
2019/07/31 Python
pytorch实现对输入超过三通道的数据进行训练
2020/01/15 Python
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
实例讲解使用HTML5 Canvas绘制阴影效果的方法
2016/03/25 HTML / CSS
NUK奶瓶美国官网:NUK美国
2016/09/26 全球购物
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
LACOSTE波兰官网:Polo衫、服装和鞋类
2020/09/29 全球购物
毕业自我鉴定范文
2013/11/06 职场文书
个人安全承诺书
2014/05/22 职场文书
调研汇报材料范文
2014/08/17 职场文书
大学生考试作弊检讨书1000字
2014/10/14 职场文书
《花钟》教学反思
2016/02/17 职场文书
Java基础之this关键字的使用
2021/06/30 Java/Android
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
Spring Security中用JWT退出登录时遇到的坑
2021/10/16 Java/Android
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers