概述

应为epoll主要用来解决网络的并发问题,所以tornado中的异步也是主要体现在网络的IO异步上,即异步web请求

tornado.httpclient.AsyncHTTPClient

tornado提供异步web请求客户端,可以用来进行异步web请求,
这个客户端和服务端是相对来说的,当tornado的Handler去其他位置去请求资源的时候,他就是客户端

fetch(request, callback=None)

用于执行一个web请求,并异步响应返回一个tornado.httpclient.httpresponse
request可以是一个url,也可以是一个tornado.httpclient.httprequest对象
如果插入的是url会自动生成一个request对象

HTTPRequest

概述

HTTP请求类,该类的构造函数可以接收参数

参数

  • url: 字符串类型,要访问的网址,必传
  • method: 字符串类型,HTTP请求方式
  • headers: 字典类型,或者HTTPHeaders类型
  • body: HTTP请求体

HTTPResponse

响应类

属性

  • code: 状态码
  • reason: 状态码的描述
  • body: 响应的数据
  • error: 异常

@tornado.web.asynchronous

不关闭通讯的通道

'''tornado 6之后弃用'''
@tornado.web.asynchronous
改成
@tornado.gen.coroutine

示例

回调函数实现异步

代码示例

class Students1Handler(RequestHandler):def on_response(self,response):print("刚进到on_response里面n")if response.error:self.send_error(500)else:print("开始获取data")data = json.loads(response.body)print("data获取成功")self.write(data)print("data写入成功")self.finish()@tornado.gen.coroutinedef get(self):# 获取所有学生的信息# time.sleep(30)# 创建客户端url = "http://127.0.0.1:8080/home"print("url是",url)client = AsyncHTTPClient()print("客户端创建成功")client.fetch(url, self.on_response)self.write("students info content!")class HomeHandler(RequestHandler):def get(self):# 获取所有学生的信息self.write("homo page info!")

协程实现异步

代码示例1

class Students2Handler(RequestHandler):@tornado.gen.coroutinedef get(self, *args, **kwargs):url = "http://s.budejie.com/topic/tag-topic/64/hot/budejie-android-6.6.9/0-20.json?market=xiaomi&ver=6.6.9&visiting=&os=7.1.1&appname=baisibudejie&client=android&udid=863254032906009&mac=02%3A00%3A00%3A00%3A00%3A00"client = AsyncHTTPClient()res = yield client.fetch(url)if res.error:self.send_error(500)else:data = json.loads(res.body)self.write(data)

代码示例2 , 将异步web请求单独分离出来

class Students3Handler(RequestHandler):@tornado.gen.coroutinedef get(self, *args, **kwargs):res = yield self.getData()self.write(res)@tornado.gen.coroutinedef getData(self):url = "http://s.budejie.com/topic/tag-topic/64/hot/budejie-android-6.6.9/0-20.json?market=xiaomi&ver=6.6.9&visiting=&os=7.1.1&appname=baisibudejie&client=android&udid=863254032906009&mac=02%3A00%3A00%3A00%3A00%3A00"client = AsyncHTTPClient()res = yield client.fetch(url)if res.error:ret = {"ret":0}else:ret = json.loads(res.body)raise tornado.gen.Return(ret)
class HomeHandler(RequestHandler):def get(self):# 获取所有学生的信息self.write("homo page info!")

相似文章

tornado学习笔记day01
tornado学习笔记day02
tornado学习笔记day03
tornado学习笔记day04
tornado学习笔记day05
tornado学习笔记day06
tornado学习笔记day07
tornado学习笔记day08

tornado学习笔记day08-tornado中的异步相关推荐

  1. 『Python学习笔记』Python中的异步Web框架之fastAPI介绍RestAPI

    Python中的异步Web框架之fastAPI介绍&RestAPI 文章目录 一. fastAPI简要介绍 1.1. 安装 1.2. 创建 1.3. get方法 1.4. post方法 1.5 ...

  2. tornado学习笔记day07-同步与异步

    同步 概念 同步就是按部就班的依次执行我们的代码 进阶 但是有些情况我们有一些比较耗时的从操作,比如去别的地方拿点资源,去其他网站请求数据,去访问数据库,上传文件等等,所以这里面优点瑕疵,有小编一一道 ...

  3. tornado学习笔记day01-高并发性能web框架

    tornado的安装 这里我使用的是虚拟环境中的pip安装,配合清华大学镜像源安装的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/ ...

  4. tornado学习笔记day06-应用安全

    应用安全 cookie 普通cookie 一般我们的用户表中都有啥呢 你在购物的时候,加入购物车,让你登录,那你登录之后,他怎么知道你登录了呢 token 这个值是随机的,存在cookie里面 设置 ...

  5. tornado学习笔记day05-访问数据库

    模板## 配置模板路径 这个在之前我们已经配置好了,可以参考前面的文章 settings = {# 就像upfile就没有,你写了也白扯'template_path': os.path.join(BA ...

  6. tornado学习笔记day04-执行顺序

    响应输出 -> write 原型 self.write()函数 源码中是这样定义的 def write(self, chunk: Union[str, bytes, dict]) -> N ...

  7. tornado学习笔记day03-响应输出

    write: 作用: 将chunk中的数据写到输出缓冲区 利用write方法写json数据 我们自己手动序列化json的那种方式Content-Type 的属性值为text-html 而我们采用wri ...

  8. tornado学习笔记day02-进阶与提升

    整理基础工程 请看第一天的配置文件目录,搭建了一个框架的基础目录 Application settings debug 作用 可以设置tornado是否工作在调试模式下面,默认为false,即工作在生 ...

  9. SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用

    1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...

最新文章

  1. 交换机IEEE 802.1Q、VLAN ID、QoS之间的关系
  2. 【深度学习】目标检测实战:4种YOLO目标检测的C++和Python两种版本实现
  3. android 中ScrollView的使用
  4. 深入理解lua的协程coroutine
  5. python新版下载安装_各种版本的Python下载安装教程
  6. markdown 转义字符
  7. android RecyclerView EditText 取消自动聚焦
  8. VMware Ubuntu 全屏问题解决
  9. linux+sasl认证失败,51CTO博客-专业IT技术博客创作平台-技术成就梦想
  10. Jira中的BUG导出
  11. C# 添加服务引用。
  12. C++ 文件输入输出问题
  13. c语言数学追赶法编程,计算方法——C语言实现——追赶法求解非线性方程
  14. 特种期货开户交易权限开通认定标准
  15. 最近公司准备启动一个风险系统【Springboot + urule 】
  16. 标签上的title属性和alt属性有什么区别
  17. python re模块的(...),group(),groups()
  18. 爬取中国地震台网以及地震科学数据
  19. webserver的使用
  20. Hibernate学习总结(一)——hibernate的简单配置使用

热门文章

  1. @Deprecated 注解 (@Documented 、@Retention、@Target)
  2. 自定义 Git - Git 钩子 (自动部署)
  3. Docker 方式安装部署 rocketMQ 、部署 图形化界面控制台、rocketMQ 控制台
  4. LiveGBS高性能GB28181国标流媒体服务流传输模式支持UDP、TCP被动、TCP主动模式
  5. js 弹窗并定时关闭
  6. Linux操作系统load average过高,kworker占用较多cpu
  7. dom内容区域的滚动overflow,scroll
  8. Conditional project or library reference in Visual Studio
  9. 分组取最新记录的SQL
  10. show部分书...