Tornado是一个Python web框架和异步网络库,最初是在FriendFeed开发的。通过使用非阻塞网络I/O, Tornado可以扩展到数以万计的开放连接,非常适合长轮询、WebSockets和其他需要与每个用户进行长时间连接的应用程序。
我们知道tornado是一个异步网络库而且是非阻塞网络IO模型,那, 什么是异步,同步, 什么又是阻塞非阻塞呢?
(来自知乎上面严肃大牛的解答~)
1.同步与异步
同步和异步关注的是消息通信机制
所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不会返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由调用者主动等待这个调用的结果
而异步则是相反,调用发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不用立刻得到结果。而是在调用发出后,被调用者通过状态,通知来通知调用者,或通过回调函数处理这个调用。
2.阻塞与非阻塞
阻塞与非阻塞关注的是程序在等待调用结果时的状态
阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在等到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。
PS:如果想深入了解同步,异步,阻塞,非阻塞,常见的IO模型以及IO多路复用,可以去看看unix网络编程。
然后再来看看python三大框架的区别~~
简单聊聊django, flask, tornado
1.django框架
这个框架给人第一印象就是很“重”,django就是一个重型武器,它的MVC设计非常优美。基本上把你开发需要用的功能都给你封装好了,你直接拿来用就好。
所以django开发效率是最高的,但是它给你什么都封装的太好,你必须按着它那套来,可扩展性差了点。
2.flask框架
这个和django对比起来,它就是一个短小精悍的武器,非常轻量级这个框架,内置的组件远远比不上django,但是flask有非常强大且活跃的第三方社区提供的牛逼插件,
真正用起来django的组件可以去找插件来弥补。然后学习flask的话,建议把源码搞明白了,因为flask是个可扩展性非常强的框架,搞懂源码以后方面封装flask的功能。。
3.tornado框架
这个和前面两个框架最大的区别就是,tornado是一个异步网络库,用的非阻塞网络IO模型,所以性能是比较高的。自身还可以用来做web服务器。
PS:其实学会了一个框架,就发现 web框架基本上用法都差不多。提议看下框架源码,帮助挺大的。