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与shell的3种交互方式介绍
Apr 11 Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 Python
一张图带我们入门Python基础教程
Feb 05 Python
Python Scapy随心所欲研究TCP协议栈
Nov 20 Python
Django框架自定义session处理操作示例
May 27 Python
python设计tcp数据包协议类的例子
Jul 23 Python
Python的形参和实参使用方式
Dec 24 Python
python手机号前7位归属地爬虫代码实例
Mar 31 Python
Django ORM filter() 的运用详解
May 14 Python
使用Python操作MySQL的小技巧
Sep 10 Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 Python
Python - 10行代码集2000张美女图
May 23 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
一个odbc连mssql分页的类
2006/10/09 PHP
php+js实现异步图片上传实例分享
2014/06/02 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
Laravel4中的Validator验证扩展用法详解
2016/07/26 PHP
php实现XML和数组的相互转化功能示例
2017/02/08 PHP
简单的php购物车代码
2020/06/05 PHP
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
js使用DOM操作实现简单留言板的方法
2015/04/10 Javascript
BootStrap 智能表单实战系列(十)自动完成组件的支持
2016/06/13 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
详解AngularJS 模块化
2017/06/14 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
JS实现可控制的进度条
2020/03/25 Javascript
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
2013/11/15 Python
浅谈Python中copy()方法的使用
2015/05/21 Python
python使用电子邮件模块smtplib的方法
2016/08/28 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
2018/12/07 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
使用Python的OpenCV模块识别滑动验证码的缺口(推荐)
2019/05/10 Python
Python连接字符串过程详解
2020/01/06 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
Python 如何查找特定类型文件
2020/08/17 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
领先的钻石和订婚戒指零售商:Diamonds-USA
2016/12/11 全球购物
Agoda.com官方网站:便宜预订全球酒店,高达80%的折扣
2018/04/04 全球购物
运动会方阵解说词
2014/02/12 职场文书
高三毕业典礼主持词
2014/03/27 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
给病人的慰问信
2015/03/23 职场文书
Java的Object类的九种方法
2022/04/13 Java/Android
使用CSS实现黑白格背景效果
2022/06/01 HTML / CSS