Tornado是一个Python web框架,同时也是一个异步网络库,最初开发于FriendFeed。通过非阻塞网络I/O,Tornado的规模可以达到万级开发式连接,使其成为那些要求与用户建立长期连接的长轮询,WebSockets,和其他应用程序的理想web框架。
Quick links
- 目前版本:6.0.2(PyPI下载地址)
- 代码源(GitHub)
- 邮件列表:讨论和公告
- Stack Overflow
- WiKi
Hello,world
这是使用Tornado实现的一个‘Hello,world’简单web app代码示例:
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
def make_app():
return tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
这个示例没有表现出Tornado任何的异步特性,关于这一点,先了解更多,可以点击查看这个demo: 简单聊天室
线程和WSGI
与大多数的Python web框架不同,Tornado不是基于WSGI,通常每个进程只跑一个线程。有关Tornado异步编程方法的更多信息,请点击【用户指南】了解更多信息。
虽然在tornado.wsgi模块中提供了对wsgi的一些支持,但它不是开发的重点,大多数应用程序应该直接使用tornado自己的接口(如tornado.web)而不是使用WSGI。
总的来说,Tornado的代码是非线程安全的。唯一可以安全的从其他线程调用的方法是IOLoop.add_callback,你也可以在执行器中使用IOLoop.run_in_executor从另一个线程上异步运行阻塞函数,但需要注意的是传递给 run_in_executor的函数应当避免引用任何Tornado对象。 run_in_executor方法被推荐用来与阻塞代码交互
异步集成
Tornado是与标准库asyncio模块集成,并共享相同的事件循环(自Tornado 5.0开始就作为默认特性)。总的来说,那些设计出来和asyncio一起使用的库可以与Tornado自由组合。
安装
pip install tornado
Tornado在PyPI中列出,可以使用pip进行安装。注意:使用pip安装的Tornado将不包括源发行版以及demo应用,所以你可以下载源副本,也可以克隆git仓库
前提: Tornado 6.0要求Python 3.5.2及以上版本(如果需要和python2.7兼容,请查看Tornado 5.1)下面的一些配件包也许可以帮到你:
- pycurl:被配件包tornado.curl_httpclient使用。Libcurl的版本要求7.22及以上。
- Twisted:tornado.platform.twisted类需要与其一起使用。
- pycares:是一个可选的非阻塞DNS解析器,当线程不适配的时候可以使用。
平台: Tornado应该在Unix类平台上运行,尽管为了获得最佳性能和可拓展性只有Linux(带epoll)和BSD(带kqueue)被建议用来生产部署(虽然Mac OS X派生于BSD并支撑kqueue,但其网络性能通常较差,所以Mac只建议用来开发使用)。Tornado也可以跑在windows上,虽然该配置不是官方支持,但也可以用来开发使用。如果不修改Tornado IOLoop接口,就不可能添加本地Tornado Windows IOLoop实现,以及Twisted和Asyncio等框架提供的Windows IOCP支持。
文档
该文档也支持PDF和Epub格式,点击跳转下载页面
用户指南
Web 框架
- tornado.web—请求处理程序和应用程序类
- tornado.template—灵活的输出生成
- tornado.routing—基本路由实现
- tornado.escape—Escaping以及字符操作
- tornado.locale—国际化支持
- tornado.websocket—与浏览器双向通信
HTTP服务端和客户端
- tornado.httpserver—非阻塞HTTP服务端
- tornado.httpclient—异步客户端
- tornado.httputil—操作HTTP头和URLs
- tornado.http1connection—HTTP/1.x client/server实现
异步网络
- tornado.ioloop—主事件循环
- tornado.iostream—对 非阻塞套接字的简易包装
- tornado.netutil—多样的网络utilities
- tornado.tcpclient—IO流连接工厂
- tornado.tcpserver—基于IO流的基本TCO服务端
协程与并发
- tornado.gen—基于生产者的协程
- tornado.locks—同步基类
- tornado.queues—协同队列
- tornado.process—多进程事务
与其他服务集成
- tornado.auth—使用OpenID和OAuth登陆的三方
- tornado.wsgi—与其他Python框架和服务的互用
- tornado.platform.caresresolver—使用C-Ares的异步DNS解析器
- tornado.platform.twisted—桥接Twisted和Tornado
- tornado.platform.asyncio—桥接asyncio和Tornado
公共事务
- tornado.autoreload—自动化检查开发分支代码的变化
- tornado.concurrent—与Future对象一起使用
- tornado.log—日志支持
- tornado.options—命令行解析
- tornado.testing—单元测试支持异步代码
- tornado.util—一般用途设备