Python Twisted學習總結

最近幾天丟下了之前學習的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,當然擁有很多值得一學的東西,網上下載資源一堆

發佈了101 篇原創文章 · 獲贊 26 · 訪問量 46萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章