發表文章

目前顯示的是 8月, 2018的文章

[Twisted] Part 22: The End

圖片
本文由Dave的 Part 22: The End 翻譯而成,你可以由 Part 1 開始閱讀這個系列的文章,也可以在 這裡 找到整個系列的目錄。 All Done 呼!感謝你支持我。當我開始這個系列時,我沒有想過這會這麼長,或者花費這麼多時間來製作。但我很享受創造這個系列的過程,也希望你享受閱讀它的過程。 現在我已經完成了,我會研究生成PDF格式的可能性。但是不保證。 最後,我想就如何繼續你的Twisted學習提出一些建議。 Further Reading 首先,我建議閱讀Twsited的 線上文件 。雖然它受到很多中傷,但我認為這比經常受到讚賞好。 如果你想使用Twisted進行網路程式設計,那麼Jean-Paul Calderone有一個備受推崇的系列,叫做「 Twisted Web in 60 Seconds 」。不過,我懷疑它會花比60秒更長的時間去閱讀。 還有一本 Twisted的書 ,由於我沒有讀過所以我不能談論太多。 但我認為比上面更重要的是閱讀Twisted的原始碼。由於那些程式碼是由非常了解Twisted的人撰寫的,它是如何以「Twisted方式」做事情的優秀的範例來源。 Suggested Exercises 將你寫過的一個同步程式轉變為使用Twsited。 從頭開始轉寫一個新的Twisted程式。 從Twisted bug資料庫 選擇一個bug然後修復它。向Twisted開發人員提交更新。不要忘記閱讀關於投稿的 程序 。 The End, Really 祝你研究愉快! 圖47.結束

[Twisted] Part 21: Lazy is as Lazy Doesn’t: Twisted and Haskell

圖片
本文由Dave的 Part 21: Lazy is as Lazy Doesn’t: Twisted and Haskell 翻譯而成,你可以由 Part 1 開始閱讀這個系列的文章,也可以在 這裡 找到整個系列的目錄。 Introduction 上個章節中,我們比較了Twisted與 Erlang ,並將注意力集中在它們共同的一些想法上。最後我們也了解使用Erlang非常簡單,因為非同步I/O與回應式程式設計是Erlang runtime與程序模型的關鍵元件。 今天我們將來到離我們的主題更遠的地方來看看 Haskell ,另一種與Erlang(當然,還有Python)完全不同的函式型(functional)語言。這次將不會有太多相似之處,但我們仍然會發現一些非同步I/O隱藏在其中。 Functional with a Capital F 雖然Erlang也是一種函式型語言,它主要關注是可靠的並行性(concurrency)模型。另一方面,Haskell是徹徹底底的函式型,毫不掩飾的使用像 functors 與 monads 這些範疇論( category theory )的概念 不要擔心,我們不會深入範疇論的東西(說得好像我們可以一樣)。相反的,我們將專注於一個Haskell更傳統的函式型功能:懶惰。如同許多函式型語言(但不像Erlang),Haskell支援 惰性求值(lazy evaluation) 。 在惰性求值語言中,程式的內容並沒有很直接地描述如何計算需要計算的東西。實際執行計算的細節通常留給編譯器與runtime系統。 並且,更重要的是當惰性求值的計算進入runtime時,可能只部分(懶惰的)而不是一次性的計算運算式。 通常runtime將只計算讓目前的運算可以有進展所需要的運算式。 這是一個應用haed得簡單的Haskell statement,對於串列[1, 2, 3],這個函式會取回串列中的第一個元素(Haskell與Python共用一些列表語法): head [1,2,3] 如果你安裝的 GHC 這個Haskell runtime,你可以自己嘗試看看: [~] ghci GHCi, version 6.12.1: http://www.haskell.org/ghc/ : ? for help Loading p...

[Twisted] Part 20: Wheels within Wheels: Twisted and Erlang

圖片
本文由Dave的 Part 20: Wheels within Wheels: Twisted and Erlang 翻譯而成,你可以由 Part 1 開始閱讀這個系列的文章,也可以在 這裡 找到整個系列的目錄。 Introduction 在這個系列中我們發現一件事情,將同步的「普通Python」程式碼與非同步的Twisted程式碼混用並不是一項簡單的任務,因為在Twisted程式中阻塞一段不確定的時間將使你喪失嘗試使用非同步模型的許多好處。 如果這是你的第一的非同步程式設計的介紹,那麼你得到的知識似乎有些應用的侷限。你可以在Twisted中使用這些新技術,但是不能在一般Python程式碼的更廣闊的世界中使用。當使用Twisted時,你通常受限於特別寫來作為Twisted程式的一部分使用的函式庫,至少如果你想直接的從執行reactor的執行緒中呼叫它們的話。 但是非同步程式設計的技術已經存在很長的時間,而且絲毫不侷限於Twisted。事實上,光Python中就有數量驚人的非同步程式設計框架。稍微 搜尋一下 可能就有幾十個結果。 它們的細節與Twisted不同,但是基本的想法(非同步I/O、以多個資料串流的小區塊來處理資料)是相同的。 所以如果你需要或選擇去使用其他的框架,你會因為已經學習了Twisted而有很好的啟蒙。 而在Python之外,有許多其他的語言與系統,基於或使用了非同步程式設計的模型。當你在探索這個主題其他更廣泛的領域時,你Twisted的知識將會技術的幫助你。 在這個章節我們會瀏覽一下 Erlang ,它是一種程式語言與runtime system,它廣泛的使用非同步程式設計的概念,但以它獨特的方式實現。請注意這不是對Erlang的概論。相反的,這是對嵌入在Erlang中的一些概念的簡短探索,以及它們如何與Twisted中的概念產生連接。基本的主題是你在學習Twisted中得到的知識可以被應用在學習其他技術時。 Callbacks Reimagined 研究一下 圖6 ,callback的圖形表示。在 Part 6 中介紹的 3.0版本用戶端 與之後所有的詩歌用戶端,主要的callback都是 dataReceived 方法。每次我們從其中一台我們已經連接的詩歌伺服器取得一部分詩歌時,這個callback就會被調用。 假設...