最近几天丢下了之前学习的UNIX环境高级编程(APUE),开始重新学习Twisted,之前在中科院空间所参与的项目使用的是Twisted异步编程框架,当时对Twisted的理解不是很深刻,因此又重新学习一遍。
异步编程简单的理解就是使用Unix中的复用I/O,使得CPU的效率使用更高,总体来说现在的编程有个趋势:单进程-->多线程-->异步编程-->协程(可能不准确),异步编程其实只使用一个CPU,但是效率要比多线程高,原因就是多线程很多的时间浪费在了IO阻塞上,http://www.ituring.com.cn/article/7467这篇文章很好的对Twisted进行了总结。
Twisted个人觉得就是对各种协议进行了高度的封装,用来实现各种协议的Server-Client通信,RPC通信,中文的学习资料很少,而且很难理解。
Twisted主要的部分就是Reactor、Defer、Application、Protocols、Service这几个部分吧,它主要就是用来写服务器部分的。
简单说下中科院项目的数据处理服务器端的架构吧,该服务器端分为两个部分,终端控制和具体数据处理部分,二者不在同一台机器上,通信协议使用的是Twisted中封装的xmlrpc,终控部分就是接受客户端的消息处理请求,对请求的部分进行初步的处理,例如获取文件位置、数据的预处理、容错的判断,然后加入Task队列;由于Twisted的异步编程是单进程的,多个CPU就不能很好的利用上,因此具体数据处理服务器为每一个处理程序开一个端口,即有多少CPU就开启多少个数据处理程序;接着把在Task队列中的任务分配到数据处理服务器,分配的算法就是将任务给当前拥有最少任务数的端口;终控和数据处理程序的通信方式也是xmlrpc。
具体的架构方式同http://twistedmatrix.com/documents/current/core/howto/tutorial/components.html这章节说的差不多。
在项目的实践中,能具体的看到Twisted异步编程的效率确实很高。
Twisted除了拥有xmlrpc的远程过程调用(Remote Procedure Call)外还有另一种方式Perspective Broker(PB),PB也很轻量化,但是提供了比XML-RPC更丰富的功能。它提供了异步的网络事务处理模式,这也是Twisted的特点,这种异步模式是Twisted的核心,对于网络的应用,异步模式在性能和可伸缩性上有巨大的优势。
XML-RPC是一个更轻量级,易于使用的协议,数据传输使用XML打包,通过HTTP传输。虽然功能不如CORBA丰富,但因为简单,轻量,所以流传很广,便于使用。
PB功能丰富主要体现在可以远程传递实体(Object),XMLRPC不知道可否(未测试),PB还提供Cacheable功能,具体参见Twisted PB教程:http://twistedmatrix.com/documents/current/core/howto/pb-intro.html
对于学习Twisted不要再Windows环境下运行代码,一定要用Linux环境,而且需要有一定的Python编程基础,当然能学到Twisted框架,Python已经到家了。
Twisted已经出来10年多了,但是中文的学习资料还是少的可怜。
Twisted主要学习资料:
官方文档:全英文,讲解很详细,实例丰富,慢慢咀嚼很容易掌握 http://twistedmatrix.com/documents/current/core/howto/index.html
老外写的配带实例的Twisted教程:实例代码全部在github上,讲解循序渐进,中文翻译教程:http://www.cyrec.org/tag/Twisted/1
啄木鸟社区的官方文档翻译教程:翻译版本不是最新的13.0,内容较分散,没有官方文档全面,配合英文文档看很不错 http://wiki.woodpecker.org.cn/moin/PyTwisted
O'Reilly出版的Twisted Network Programming Essentials教程:个人觉得此书写的不是很好,内容过于偏向Web,当然拥有很多值得一学的东西,网上下载资源一堆