《Django企业开发实战》试读:2.4 Tornado 框架

Tornado 框架的官方网站是http://tornadoweb.org/。 2.4.1 印象 我在工作中使用Tornado 有5 年了。相对于上一节的Flask,我对Tornado 更熟悉。但是如果要总结Tornado 的特性的话,那也只是高性能。除此之外,没有什么可以介绍的。 不同于Flask 或者其他基于WSGI 的框架,Tornado 并不是基于WSGI 协议的框架。虽然它提供了WSGI 协议的支持,但是为了能够用到它的特性(异步和非阻塞),官方建议还是直接通过自带的HTTP Server 进行部署,而不是WSGI。我们在之前的实践中也是这么做的。 因为WSGI 协议是一个同步接口,所以Application 端只需要处理上游发送过来的environ(2.2 节有介绍)。当然,现在的WSGI Server (或者叫WSGI 容器)支持多种启动方式,比如Gunicorn可以通过gevent/greenlet/gthread 等来实现协程或者通过异步I/O 的方式来处理连接,但是这些都是WSGI Server 中的功能,跟Application 是完全隔离的。所以,这对Tornado 中的WSGI 协议的适配也没太多作用,无法利用Tornado 自身的特性,官方也不推荐使用WSGI 的方式部署。 2.4.2 内置功能 对比Flask 来说,Tornado 的特点十分明显,除了基本的Request 和Response 封装之外,就是基于IOLoop 的特性。我们只来看看Web 相关的功能。 □ tornado.web:基础的Request 的封装。 □ tornado.template:简单的模板系统。 □ tornado.routing:基础的路由配置。 □ tornado.escape:转码和字符串的操作。 □ tornado.locale:国际化的支持。 □ tornado.websocket:WebSocket 的支持。 从整体上看,它并不如Flask 丰富,比如在session 的实现、文档友好程度、第三方插件的丰富程度等方面。但是,这个差异其实是因为两个框架定位的不同,Flask 更多的是对业务需求的满足,而Tornado 针对的是高性能Web 系统。至于业务的部分,自己实现吧。 除了上面列出来的基础功能,Tornado 最大的卖点还是基于IOLoop(或者说基于Event Loop)的异步非阻塞的实现。就像文档中声称的: By using non-blocking network I/O, Tornado can scale to tens of thousands of openconnections, making it ideal for long polling, WebSockets, and other applications that require along-lived connection to each user. 翻译一下就是:通过非阻塞的网络I/O,Tornado 能够支撑成千上万个连接,这使它很适合对每个用户都建立长连接的需求,无论是通过长轮询、WebSocket 还是其他应用。 这也是我们选择它的原因。虽然我们的业务场景并非长连接,但是它能够承担更多的并发量正是我们需要的。 2.4.3 总结 在Python 2.x 的环境中,基于Event Loop 模型的Tornado 确实很有卖点。只是在Python 3.x中,语言内部支持了Event Loop,这 导致更多的框架可以很容易地开发出异步非阻塞的模型。这对于Tornado 确实是一个挑战。 但是,新兴的框架必然还要经受生产环境的考验,积累大量经验之后,其他人才可能放心使用。而Tornado 基于多年的发展已经在生产环境中得到了证明,并且有大量的企业会分享出他们的最佳实践。 未来哪种异步非阻塞的框架更加流行不好断言,但是从技术知识上来讲都差不太多。

>Django企业开发实战

Django企业开发实战
作者: 胡阳
副标题: 高效Python Web框架指南
isbn: 7115506892
书名: Django企业开发实战
页数: 392
定价: 99.00元
出版社: 人民邮电出版社
出版年: 2019-2
装帧: 平装