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相关推荐

  1. django在nginx uwsgi和tornado异步方案在项目中的体验

    前言: 这两天搜文章的时候,发现不少人对tornado有些误解的.只是想说说自己对于这些框架的理解,和实际项目中的对比. 部分有文章说tornado性能很一般,我当时一瞅,很是郁闷,这些人是怎么测试的 ...

  2. 【进阶】 --- 多线程、多进程、异步IO实用例子

    [进阶] --- 多线程.多进程.异步IO实用例子:https://blog.csdn.net/lu8000/article/details/82315576 python之爬虫_并发(串行.多线程. ...

  3. Python 异步 IO 、协程、asyncio、async/await、aiohttp

    From :廖雪峰 异步IO :https://www.liaoxuefeng.com/wiki/1016959663602400/1017959540289152 Python Async/Awai ...

  4. python execute异步执行_封装了一个对mysql进行异步IO的小工具

    作者(微信公众号):猿人学Python SanicDB 是为 Python的异步 Web 框架 Sanic 方便操作MySQL而开发的工具,是对 aiomysql.Pool 的轻量级封装.Sanic ...

  5. [进阶]-多线程、多进程、异步IO实用例子

    在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢.以下代码默认运行环境为python3. 目录 一.多线程.多进程 1.同步执行 2.多线 ...

  6. python异步的发展历程_深入了解Python的异步IO:概念和历史

    前面发表了<简说Python Web异步框架>一文后,很多朋友希望能更多了解Python关于asyncio的知识.正好,我也想深入理解理解这方面的知识,于是就促成了这篇文章. 一.软件系统 ...

  7. tornado异步非阻塞实现方式

    目录 tornado异步非阻塞实现方式 1.多线程 2.老版协程 3.新版协程 实验 1.完全阻塞,同步代码 2.老版本协程 3新版本协程 4 多线程+新版协程,线程函数失效 5.线程+不声明异步,可 ...

  8. 5.(基础)tornado异步

    终于到了传说中的异步了,感觉异步这个名字听起来就很酷酷的,以前还不是多擅长Python时,就跑去看twisted的源码,结果给我幼小的心灵留下了创伤.反正包括我在内,都知道异步编程很强大,但是却很少在 ...

  9. 协程和任务 异步IO 重点

    20210815 https://mp.weixin.qq.com/s/XeHaWhKztnCOIXb_2GSitQ https://mp.weixin.qq.com/s/lnox3pbpzJ2kWl ...

最新文章

  1. java的初始化顺序
  2. C可变参数详解及其函数设计
  3. linux 内核线程与普通进程的区别
  4. 关于VS2017使用中常见的几个问题
  5. 鸡啄米vc++2010系列11(非模态对话框的创建)
  6. utils C/C++的常用工具类
  7. 虚拟主机 php .htacess,LiteSpeed添加虚拟主机+支持htaccess图文教程
  8. Collection 和 Collections区别
  9. 前端学习(2736):重读vue电商网站46之执行build 时报错
  10. 【转】ABP源码分析四十三:ZERO的本地化
  11. kernel部分数据结构列表三(inode)
  12. java中tcp传图片_Java学习之TCP上传图片
  13. 文本自动摘要任务的“不完全”心得总结
  14. Windos10+VS2019+Qt5.14+Coin3D+SoQt
  15. FFmpeg 图片转TS
  16. Markdown文件转pdf方法
  17. html导航折叠与展开,html展开收起
  18. win10相机打不开,qq可以正常打开:Windows 相机应用错误代码 0xA00F4288
  19. How to solve javadoc Chinese garbled in IntelliJ Idea
  20. [JZOJ6347] 【NOIP2019模拟2019.9.8】ZYB玩字符串

热门文章

  1. 抽奖啦!量子位原创T恤任性送,夏天就要酷酷的
  2. 李笑来登GitHub趋势榜第一,教你自学编程,含37%“硬核鸡汤”
  3. 便宜可靠的激光雷达可能要来了!Luminar关键部件成本降到3美元
  4. 无需在数据集上学习和预训练,这种图像修复新方法效果惊人 | 论文
  5. 当区块链遇到零知识证明 1
  6. 三大角度 PK ,Go 语言和 Node.js 谁胜谁负?
  7. pyspark 冒烟
  8. vue 数组重复,循环报错
  9. 批量修改同一目录下文件名--操作so easy
  10. CALLBACKS IN C++ USING TEMPLATE FUNCTORS