tornado学习笔记day08-tornado中的异步
概述
应为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学习笔记day08-tornado中的异步相关推荐
- 『Python学习笔记』Python中的异步Web框架之fastAPI介绍RestAPI
Python中的异步Web框架之fastAPI介绍&RestAPI 文章目录 一. fastAPI简要介绍 1.1. 安装 1.2. 创建 1.3. get方法 1.4. post方法 1.5 ...
- tornado学习笔记day07-同步与异步
同步 概念 同步就是按部就班的依次执行我们的代码 进阶 但是有些情况我们有一些比较耗时的从操作,比如去别的地方拿点资源,去其他网站请求数据,去访问数据库,上传文件等等,所以这里面优点瑕疵,有小编一一道 ...
- tornado学习笔记day01-高并发性能web框架
tornado的安装 这里我使用的是虚拟环境中的pip安装,配合清华大学镜像源安装的 pip install tornado -i https://pypi.tuna.tsinghua.edu.cn/ ...
- tornado学习笔记day06-应用安全
应用安全 cookie 普通cookie 一般我们的用户表中都有啥呢 你在购物的时候,加入购物车,让你登录,那你登录之后,他怎么知道你登录了呢 token 这个值是随机的,存在cookie里面 设置 ...
- tornado学习笔记day05-访问数据库
模板## 配置模板路径 这个在之前我们已经配置好了,可以参考前面的文章 settings = {# 就像upfile就没有,你写了也白扯'template_path': os.path.join(BA ...
- tornado学习笔记day04-执行顺序
响应输出 -> write 原型 self.write()函数 源码中是这样定义的 def write(self, chunk: Union[str, bytes, dict]) -> N ...
- tornado学习笔记day03-响应输出
write: 作用: 将chunk中的数据写到输出缓冲区 利用write方法写json数据 我们自己手动序列化json的那种方式Content-Type 的属性值为text-html 而我们采用wri ...
- tornado学习笔记day02-进阶与提升
整理基础工程 请看第一天的配置文件目录,搭建了一个框架的基础目录 Application settings debug 作用 可以设置tornado是否工作在调试模式下面,默认为false,即工作在生 ...
- SpringBoot学习笔记(4)----SpringBoot中freemarker、thymeleaf的使用
1. freemarker引擎的使用 如果你使用的是idea或者eclipse中安装了sts插件,那么在新建项目时就可以直接指定试图模板 如图: 勾选freeMarker,此时springboot项目 ...
最新文章
- 交换机IEEE 802.1Q、VLAN ID、QoS之间的关系
- 【深度学习】目标检测实战:4种YOLO目标检测的C++和Python两种版本实现
- android 中ScrollView的使用
- 深入理解lua的协程coroutine
- python新版下载安装_各种版本的Python下载安装教程
- markdown 转义字符
- android RecyclerView EditText 取消自动聚焦
- VMware Ubuntu 全屏问题解决
- linux+sasl认证失败,51CTO博客-专业IT技术博客创作平台-技术成就梦想
- Jira中的BUG导出
- C# 添加服务引用。
- C++ 文件输入输出问题
- c语言数学追赶法编程,计算方法——C语言实现——追赶法求解非线性方程
- 特种期货开户交易权限开通认定标准
- 最近公司准备启动一个风险系统【Springboot + urule 】
- 标签上的title属性和alt属性有什么区别
- python re模块的(...),group(),groups()
- 爬取中国地震台网以及地震科学数据
- webserver的使用
- Hibernate学习总结(一)——hibernate的简单配置使用
热门文章
- @Deprecated 注解 (@Documented 、@Retention、@Target)
- 自定义 Git - Git 钩子 (自动部署)
- Docker 方式安装部署 rocketMQ 、部署 图形化界面控制台、rocketMQ 控制台
- LiveGBS高性能GB28181国标流媒体服务流传输模式支持UDP、TCP被动、TCP主动模式
- js 弹窗并定时关闭
- Linux操作系统load average过高,kworker占用较多cpu
- dom内容区域的滚动overflow,scroll
- Conditional project or library reference in Visual Studio
- 分组取最新记录的SQL
- show部分书...