Tornado异步框架理解

本文通过一个简单的例子展示了Tornado 3.1.1版本在Python 2.7.3环境下的工作原理。核心在于使用epoll模型处理高并发,确保高效接受请求,并通过IOLoop实现异步,提高CPU利用率,从而在高并发场景下保持高性能。
摘要由CSDN通过智能技术生成

一、介绍
这里直接引用原文:
Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections.
An asynchronous networking library (IOLoop and IOStream), which serve as the building blocks for the HTTP components and can also be used to implement other protocols.
对于几种网络IO模型的理解可以参考:
http://blog.csdn.net/historyasamirror/article/details/5778378
http://www.cnblogs.com/Anker/p/3254269.html
http://www.ibm.com/developerworks/cn/linux/l-async/
个人觉得前两篇阐述得比较准确,第三篇有些词容易产生异议,比如异步阻塞I/O说的其实就是IO multiplexing,而异步非阻塞I/O则是Asynchronous I/O,使用后面的术语不易混淆些。这里引用几句话:
同步IO与异步IO:是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事情,IO交给内核来处理,完成后内核通知进程IO完成。
阻塞IO与非阻塞IO:简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。
这里有个比较容易疑惑的地方,这里的异步说进程触发IO操作后,直接返回,那么是否可以理解为异步IO一定是非阻塞IO呢?是这样的,这是四种不同的IO模型,它们有各自的定义和特点,不是包含非包含的关系。另外确定是否为异步,要看操作系统是否将用户数据主动的拷贝到用户(服务器)空间去供用户使用,而不是用户(服务器)主动监听。

我的理解:tornado基于epoll模型,属于IO multiplexing,并非异步IO模型,也不是非阻塞IO模型,事实上tornado里面说的asynchronous and non-blocking主要是针对函数和连接(socket)而言的:
An asynchronous function returns before it is finished.
In the context of Tornado we generally talk about blocking in the context of network I/O, although all kinds of blocking are to be minimized.
其实我们平常常说的同步异步并不一定是在说IO模型。

二、它如何工作

我用的tornado版本为3.1.1,python版本为2.7.3,下面是一个简单的例子:

from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.web import Application, RequestHandler, asynchronous

class MainHandler(RequestHandler):
    @asynchronous
    def get(self):
        self.finish("Hello, world")

if __name__ == "__main__":
    http_server = HTTPServer(Application([(r"/", MainHandler),]))
    http_server.listen(8888)
    IOLoop.instance().start()

这样一个高性能的web服
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值