Tornado异步IO
Tornado提供了强大的异步IO机制,提高了服务器的响应能力.
@tornado.web.asynchronous
tornado默认在处理函数返回时关闭链接,@tornado.web.asynchronous
修饰器使得连接保持开启, 即修饰器将RequestHandler 的 _auto_finish 属性置为 false.
需要调用RequestHandler.finish()方法关闭连接。
class IndexHandler(tornado.web.RequestHandler):def on_finish():self.finish()@tornado.web.asynchronousdef get(self):self.write('Async Hello')self.finish()
@tornado.gen.engine
Tornado 通过 @asynchronous decorator 来实现异步请求,但使用的时候必须将 RequestHandler 和 callback 分离开,tornado.gen 模块可以帮助我们在一个函数里完成这两个工作。
@tornado.gen使用python的generator来实现异步。
该修饰器必须包含在@asynchronous
修饰器内层。
class GenAsyncHandler(RequestHandler):@asynchronous@gen.enginedef get(self):http_client = AsyncHTTPClient()response = yield gen.Task(http_client.fetch, "http://example.com")do_something_with_response(response) self.render("template.html")
tornado.gen.Task(func, *args, **kwargs)
Task的构造器接受一个异步调用func(如http_client.fetch), 并把args和kwargs传给func.
在异步调用返回(发送消息)后yield Task对象,在异步调用返回结果赋给response,从下一行继续执行(和原生的Python协程相同).
注意Task的func必须是异步调用,否则仍会造成阻塞。
tornado自带的各种AsyncClient经常用于此种情形下。
@tornado.gen.coroutine
在tornado3发布之后,强化了coroutine的概念,在异步编程中,gen.coroutine替代了原来的gen.engine,两者的使用是基本一致的。
从调用者角度说,@gen.coroutine
类似于@return_future
和@gen.engine
.
ioloop
Tornado依赖ioloop实现了非阻塞式(同步多路IO复用)的请求响应,ioloop采用epoll或者select实现。
理解非阻塞和异步io的好机会……
Tornado异步IO相关推荐
- django在nginx uwsgi和tornado异步方案在项目中的体验
前言: 这两天搜文章的时候,发现不少人对tornado有些误解的.只是想说说自己对于这些框架的理解,和实际项目中的对比. 部分有文章说tornado性能很一般,我当时一瞅,很是郁闷,这些人是怎么测试的 ...
- 【进阶】 --- 多线程、多进程、异步IO实用例子
[进阶] --- 多线程.多进程.异步IO实用例子:https://blog.csdn.net/lu8000/article/details/82315576 python之爬虫_并发(串行.多线程. ...
- Python 异步 IO 、协程、asyncio、async/await、aiohttp
From :廖雪峰 异步IO :https://www.liaoxuefeng.com/wiki/1016959663602400/1017959540289152 Python Async/Awai ...
- python execute异步执行_封装了一个对mysql进行异步IO的小工具
作者(微信公众号):猿人学Python SanicDB 是为 Python的异步 Web 框架 Sanic 方便操作MySQL而开发的工具,是对 aiomysql.Pool 的轻量级封装.Sanic ...
- [进阶]-多线程、多进程、异步IO实用例子
在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢.以下代码默认运行环境为python3. 目录 一.多线程.多进程 1.同步执行 2.多线 ...
- python异步的发展历程_深入了解Python的异步IO:概念和历史
前面发表了<简说Python Web异步框架>一文后,很多朋友希望能更多了解Python关于asyncio的知识.正好,我也想深入理解理解这方面的知识,于是就促成了这篇文章. 一.软件系统 ...
- tornado异步非阻塞实现方式
目录 tornado异步非阻塞实现方式 1.多线程 2.老版协程 3.新版协程 实验 1.完全阻塞,同步代码 2.老版本协程 3新版本协程 4 多线程+新版协程,线程函数失效 5.线程+不声明异步,可 ...
- 5.(基础)tornado异步
终于到了传说中的异步了,感觉异步这个名字听起来就很酷酷的,以前还不是多擅长Python时,就跑去看twisted的源码,结果给我幼小的心灵留下了创伤.反正包括我在内,都知道异步编程很强大,但是却很少在 ...
- 协程和任务 异步IO 重点
20210815 https://mp.weixin.qq.com/s/XeHaWhKztnCOIXb_2GSitQ https://mp.weixin.qq.com/s/lnox3pbpzJ2kWl ...
最新文章
- java的初始化顺序
- C可变参数详解及其函数设计
- linux 内核线程与普通进程的区别
- 关于VS2017使用中常见的几个问题
- 鸡啄米vc++2010系列11(非模态对话框的创建)
- utils C/C++的常用工具类
- 虚拟主机 php .htacess,LiteSpeed添加虚拟主机+支持htaccess图文教程
- Collection 和 Collections区别
- 前端学习(2736):重读vue电商网站46之执行build 时报错
- 【转】ABP源码分析四十三:ZERO的本地化
- kernel部分数据结构列表三(inode)
- java中tcp传图片_Java学习之TCP上传图片
- 文本自动摘要任务的“不完全”心得总结
- Windos10+VS2019+Qt5.14+Coin3D+SoQt
- FFmpeg 图片转TS
- Markdown文件转pdf方法
- html导航折叠与展开,html展开收起
- win10相机打不开,qq可以正常打开:Windows 相机应用错误代码 0xA00F4288
- How to solve javadoc Chinese garbled in IntelliJ Idea
- [JZOJ6347] 【NOIP2019模拟2019.9.8】ZYB玩字符串
热门文章
- 抽奖啦!量子位原创T恤任性送,夏天就要酷酷的
- 李笑来登GitHub趋势榜第一,教你自学编程,含37%“硬核鸡汤”
- 便宜可靠的激光雷达可能要来了!Luminar关键部件成本降到3美元
- 无需在数据集上学习和预训练,这种图像修复新方法效果惊人 | 论文
- 当区块链遇到零知识证明 1
- 三大角度 PK ,Go 语言和 Node.js 谁胜谁负?
- pyspark 冒烟
- vue 数组重复,循环报错
- 批量修改同一目录下文件名--操作so easy
- CALLBACKS IN C++ USING TEMPLATE FUNCTORS