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中random模块用法实例分析
May 19 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
python 读取摄像头数据并保存的实例
Aug 03 Python
Python骚操作之动态定义函数
Mar 26 Python
使用Python实现跳帧截取视频帧
May 31 Python
在自动化中用python实现键盘操作的方法详解
Jul 19 Python
django将网络中的图片,保存成model中的ImageField的实例
Aug 07 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
pytorch载入预训练模型后,实现训练指定层
Jan 06 Python
Keras使用ImageNet上预训练的模型方式
May 23 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
pytorch中的model.eval()和BN层的使用
May 22 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
GD输出汉字的函数的分析
2006/10/09 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
2013/04/10 PHP
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
php上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
SOSO地图JS画出标注和中心点以html形式运行
2013/08/09 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
JavaScript表单焦点自动切换代码
2016/07/24 Javascript
Google 地图API资料整理及详细介绍
2016/08/06 Javascript
AngularJS 整理一些优化的小技巧
2016/08/18 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
2017/02/06 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
jQuery实现火车票买票城市选择切换功能
2017/09/15 jQuery
微信小程序自定义导航栏
2018/12/31 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
python的迭代器与生成器实例详解
2014/07/16 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
python数字图像处理之骨架提取与分水岭算法
2018/04/27 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
咨询公司各岗位职责
2013/12/02 职场文书
社区母亲节活动方案
2014/03/05 职场文书
电子商务专业学生职业生涯规划
2014/03/07 职场文书
教师考核材料
2014/05/21 职场文书
安全宣传标语
2014/06/10 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
检举信的写法
2019/04/10 职场文书
退休劳动合同怎么写?
2019/10/25 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
MySQL系列之四 SQL语法
2021/07/02 MySQL