Python 中的Tornado 和 Django 框架哪个好?请看本文分解

  • A+
所属分类:ptython全栈开发

.Python 编程语言相对于其他编程语言来说,属于比较容易学习的一门编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。所以,已经有越来越多的初学者选择Python 语言作为编程的入门语言。Python 语言因为有了丰富强大的类库,效率高也高,所以,Python 的开发效率能够显著提高。实现相同的功能,Python 代码的文件往往只有 C、C++ 和 Java 代码的 1/5~1/3。这也是为什么各大互联网公司广泛使用 Python 语言的原因。还有python应用广:工程师可以使用 Python 做很多的事情。例如,Web 开发、网络编程、自动化运维、Linux 系统管理、数据分析、科学计算、人工智能、机器学习等等。今天我们来看下Python 中的Tornado 和 Django 框架哪个好?

Python 中的Tornado 和 Django 框架哪个好?请看本文分解

Python Tornado

  • Tornado:python编写的web服务器兼web应用框架

Tornado( http://www.tornadoweb.org )是Facebook开源出来的框架,其哲学跟Django近乎两个极端。

Tornado走的是少而精的方向,它也有提供模板功能;虽然不鼓励,但作者是可以允许在模板进行少量编码(直接嵌入单行py代码)的。

Python 中的Tornado 和 Django 框架哪个好?请看本文分解

如果跟asp.net相比,Tornado有点类似仅实现了AsyncHttpHandler;除此之外,全部需要自己去实现。

好吧,其实它有模板,有国际化支持,甚至还有内置的OAuth/OpenID模块,方便做第三方登录,它其实也直接实现了Http服务器。

但它没有ORM(仅有一个mysql的超简单封装),甚至没有Session支持,更不要说Django那样自动化的后台。

假设是一个大型网站,在高性能的要求下,框架的各个部分往往都需要定制,可以复用的模块非常少;一个以Django开发的网站,各部分经过不断的定制,Django框架剩下的,很有可能也就是tornado一开始所能提供的这部分。

1.1.Tornado的优势

  • 轻量级web框架

  • 异步非阻塞IO处理方式

  • 出色的抗负载能力

  • 优异的处理性能,不依赖多进程/多线程,一定程度上解决C10K问题

  • WSGI全栈替代产品,推荐同时使用其web框架和HTTP服务器

    .Python Tornado的安装一条命令就可以了

 pip install tornado   Tornado入门程序:

Python 中的Tornado 和 Django 框架哪个好?请看本文分解

Django

Django的模板系统设计十分有意思,也应该其框架内影响最大、争议最大的部分。

Python 中的Tornado 和 Django 框架哪个好?请看本文分解

Python 中的Tornado 和 Django 框架哪个好?请看本文分解

Django模板的设计哲学是彻底的将代码、样式分离;asp.net提倡将代码/模板分离,但技术上还是可以混合;而Django则是从根本上杜绝在模板中进行编码、处理数据的可能。

比方说,asp.net模板中可以写:

<%  int i;  for(i==0;i<10;i++){  ....  } %>

.Tornado VS Django

  • Django:重量级web框架,功能大而全,注重高效开发

  • 内置管理后台

  • 内置封装完善的ORM操作

  • session功能

  • 后台管理

  • 缺陷:高耦合

  • Tornado:轻量级web框架,功能少而精,注重性能优越

  • HTTP服务器

  • 异步编程

  • WebSocket

  • 缺陷:入门门槛较高

Django是彻底不支持嵌入类似上面的代码,仅能使用其模板内置的函数;这实际上,是为其模板构造了一种“新语言”;由于此“新语言”十分简单,所以也能够将其模板移植到不同平台。

Python 中的Tornado 和 Django 框架哪个好?请看本文分解

大多数情况下,Django的模板功能是足够的,但对于特殊(有时“特殊”也不是十分特殊)的情况,还是需要在模板中嵌入代码,那么就需要根据其模板系统的规则做模板扩展。有时候,模板中直接写一行代码能够解决的问题,用模板扩展实现后,会变成十几行代码。

HTTP服务器

Tornado为了高效实现Comet/后端异步调用HTTP接口,是直接内嵌了HTTP服务器。

前端无需加apache / lighttpd / nginx等也可以供浏览器访问;但它并没有完整实现HTTP 1.1的协议,所以官方文档是推荐用户在生产环境下在前端使用nginx,后端反向代理到多个Tornado实例。

Tornado本身是单线程的异步网络程序,它默认启动时,会根据CPU数量运行多个实例;充分利用CPU多核的优势。

下面我们看httpserver底层如何处理:

Python 中的Tornado 和 Django 框架哪个好?请看本文分解

单线程异步

网站基本都会有数据库操作,而Tornado是单线程的,这意味着如果数据库查询返回过慢,整个服务器响应会被堵塞。

数据库查询,实质上也是远程的网络调用;理想情况下,是将这些操作也封装成为异步的;但Tornado对此并没有提供任何支持。

这是Tornado的设计,而不是缺陷。

一个系统,要满足高流量;是必须解决数据库查询速度问题的!

数据库若存在查询性能问题,整个系统无论如何优化,数据库都会是瓶颈,拖慢整个系统!

异步并**不能**从本质上提到系统的性能;它仅仅是避免多余的网络响应等待,以及切换线程的CPU耗费。

如果数据库查询响应太慢,需要解决的是数据库的性能问题;而不是调用数据库的前端Web应用。

对于实时返回的数据查询,理想情况下需要确保所有数据都在内存中,数据库硬盘IO应该为0;这样的查询才能足够快;而如果数据库查询足够快,那么前端web应用也就无将数据查询封装为异步的必要。

就算是使用协程,异步程序对于同步程序始终还是会提高复杂性;需要衡量的是处理这些额外复杂性是否值得。

如果后端有查询实在是太慢,无法绕过,Tornaod的建议是将这些查询在后端封装独立封装成为HTTP接口,然后使用Tornado内置的异步HTTP客户端进行调用。

Python 中的Tornado 和 Django 框架哪个好?,各有各的好。我认为Torndo性能好于Django 40%左右,而Django 框架用于开发大网站,功能大而全,注重高效开发,性能比Torndo低。好了今天就分享到这里,欢迎学习python的伙伴留言跟小编交流。

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: