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.asynchronous
def 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.engine
def 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. Python自动化 【第十篇】:Python进阶-多进程/协程/事件驱动与Select\Poll\Epoll异步IO

    本节内容: 多进程 协程 事件驱动与Select\Poll\Epoll异步IO   1.  多进程 启动多个进程 进程中启进程 父进程与子进程 进程间通信 不同进程间内存是不共享的,要想实现两个进程间 ...

  2. 【译】深入理解python3.4中Asyncio库与Node.js的异步IO机制

    转载自http://xidui.github.io/2015/10/29/%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3python3-4-Asyncio%E5%BA%93% ...

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

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://rfyiamcool.blog.51cto.com/1030776/1397495 ...

  4. Tornado异步非阻塞的使用以及原理

    Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其 非阻塞的方式和对 epoll 的运用,Tornado ...

  5. IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO

    IO模型介绍: * blocking IO 阻塞IO * nonblocking IO 非阻塞IO * IO multiplexing IO多路复用 * signal driven IO 信号驱动IO ...

  6. {python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO(Asynchronous I/O) IO模型比较分析 selectors模块

    python之IO多路复用 阅读目录 一 IO模型介绍 二 阻塞IO(blocking IO) 三 非阻塞IO(non-blocking IO) 四 多路复用IO(IO multiplexing) 五 ...

  7. (转)Python黑魔法 --- 异步IO( asyncio) 协程

    转自:http://www.jianshu.com/p/b5e347b3a17c?from=timeline Python黑魔法 --- 异步IO( asyncio) 协程 作者 人世间 关注 201 ...

  8. Python学习---Python的异步IO[all]

    1.1.1. 前期环境准备和基础知识 安装: pip3 install aiohttp pip3 install grequests pip3 install wheel pip3 install s ...

  9. python之爬虫_并发(串行、多线程、多进程、异步IO)

    并发 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢 import requests def fetch_async(url): res ...

随机推荐

  1. CSS选择器分类总结

    一.选择器语法及其意义(pattern and meaning) Pattern Meaning CSS level E an element of type E 标记选择器,匹配所有标签名为E的元素 ...

  2. ADO.NET操作PostgreSQL:数据库操作类(已封装)

    1.增.删.改通用方法 /// <summary> /// 增.删.改通用方法 /// </summary> /// <param name="commandT ...

  3. 如何读取maven项目中的resources

    建立一个maven web项目,project-name/src/main下面有3个目录,java.resources.webapp java中存放java源代码,package等 resources ...

  4. 用 python 修改文件中指定的行数

    #! /bin/python filename='setup.ini' lines=[] with open(filename,'r') as f: lines=f.readlines() lines ...

  5. string的函数的学习

    1.string类型的构造函数和对象的定义 string s3 : 把string s2 拷贝的 s3 string s4 : 把数组首地址或者字符串首地址strArr 从0开始截取到第n个字母 st ...

  6. “全栈2019”Java多线程第二十五章:生产者与消费者线程详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  7. 学习 swift (1)

    https://developer.apple.com/library/prerelease/ios/referencelibrary/GettingStarted/DevelopiOSAppsSwi ...

  8. 实现一个算法,寻找字符串中出现次数最少的、并且首次出现位置最前的字符 如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少)。并且比其他只出现一次的字符(如"d")首次出现的位置最靠前。

    实现一个算法,寻找字符串中出现次数最少的.并且首次出现位置最前的字符如"cbaacfdeaebb",符合要求的是"f",因为他只出现了一次(次数最少).并且比其 ...

  9. Flask从入门到精通之大型程序的结构二

    一.程序包 程序包用来保存程序的所有代码.模板和静态文件.我们可以把这个包直接称为app(应用),如果有需求,也可使用一个程序专用名字.templates 和static 文件夹是程序包的一部分,因此 ...

  10. Elasticsearch安装与环境配置

    Elasticsearch安装与环境配置 确保机器上已经安装了jdk7以上版本 下载:官网下载地址:https://www.elastic.co/downloads/elasticsearch 将下载 ...