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程序员开发中常犯的10个错误
Jul 07 Python
python获取文件版本信息、公司名和产品名的方法
Oct 05 Python
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
Python配置文件解析模块ConfigParser使用实例
Apr 13 Python
使用python加密自己的密码
Aug 04 Python
Python实现多线程HTTP下载器示例
Feb 11 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
Python3 模块、包调用&路径详解
Oct 25 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
python操作redis方法总结
Jun 06 Python
Python实现SQL注入检测插件实例代码
Feb 02 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
Smarty foreach控制循环次数的一些方法
2015/07/01 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
翻译整理的jQuery使用查询手册
2007/03/07 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
Vue2.5学习笔记之如何在项目中使用和配置Vue
2018/09/26 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
Python数据类型学习笔记
2016/01/13 Python
python实现中文转换url编码的方法
2016/06/14 Python
Python Django切换MySQL数据库实例详解
2019/07/16 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
pycharm2020.2 配置使用的方法详解
2020/09/16 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
HTML5新增属性data-*和js/jquery之间的交互及注意事项
2017/08/08 HTML / CSS
智能电子应届生求职信
2013/11/10 职场文书
计算机专业毕业生的自我评价
2013/11/18 职场文书
商务英语求职自荐信范文
2013/12/24 职场文书
行政人事岗位职责
2014/03/17 职场文书
工作收入证明范本
2015/06/12 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
Python天气语音播报小助手
2021/09/25 Python
JavaScript文档对象模型DOM
2021/11/20 Javascript
Mysql的Table doesn't exist问题及解决
2022/12/24 MySQL