2011-03-28 75 views
70

我越來越聽到Python的Twisted框架岩石和其他框架相形失色。Twisted有什麼好酷的?

有沒有人可以對此有所瞭解,並可能將Twisted與其他網絡編程框架進行比較。

+2

似乎沒有什麼[在那裏](http://wiki.python.org/moin/UsefulModules#Networking)甚至遠程比較扭曲,所以這個問題有點難以回答。你在考慮什麼替代方案? – 2011-03-28 12:02:54

+1

@Sven即使不是一個Python開發人員,我只是好奇於是什麼讓Twisted與聲明一樣好。 – 2011-03-28 12:07:03

+2

@Sven Marnach:它取決於一個問題域,例如['gevent'](http://www.gevent.org/)是「算命師」應用程序http://blip.tv/文件/ 4883016 – jfs 2011-03-28 12:40:05

回答

113

有很多的扭曲的不同方面,你可能會發現酷。

扭曲包括很多很多的協議實現的,這意味着比沒有更可能會出現,你可以用它來談談一些遠程系統(客戶端或服務器在大多數情況下)的API - 無論是HTTPFTPSMTP, POP3, IMAP4DNSIRC, MSN, OSCAR, XMPP/Jabbertelnet, SSH,SSL,NNTP,或像手指,或IDENT,或像DJB'snetstrings的低層協議建設的協議之一真正模糊的協議之一,simple line-oriented protocols,或扭曲的自定義協議甚至一如Perspective Broker (PB)Asynchronous Messaging Protocol (AMP)

Twisted的另一個很酷的事情是,在這些低級協議實現之上,你會經常發現一個更容易使用的抽象。例如,在編寫HTTP服務器時,Twisted Web提供了a "Resource" abstraction,它允許您從Python對象中構建URL層次結構,以定義如何響應請求。

所有這些都與合作API綁定在一起,主要是因爲這些功能都沒有通過網絡阻塞來實現,因此您無需啓動a thread for every operation you want to do。這有助於提高人們通常認爲Twisted的可擴展性(儘管這種可擴展性只涉及單臺計算機,而不是讓應用程序增長以使用整個主機集羣的可擴展性),因爲Twisted可以處理數千個單線程中的連接,這往往比擁有數千個線程的工作更好,每個線程都需要一個連接。

避免線程也進行測試和調試(因而可靠性一般)是有益的。由於在基於Twisted的典型程序中沒有先發制人的上下文切換,通常不需要擔心鎖定。取決於不同網絡事件發生順序的競爭條件可以通過模擬這些網絡事件很容易地進行單元測試(而模擬上下文切換不是大多數(任何?)線程庫提供的功能)。

扭曲也是真的,真的concerned with quality。所以你會在Twisted版本中使用rarely find regressions,即使你沒有以常用的方式使用它們,大多數API也可以工作(因爲我們試圖測試你可能使用它們的所有方式,而不僅僅是常用的方式) 。對於在過去3年或4年內添加到Twisted(或修改)的所有代碼而言,尤其如此,因爲自那時以來,100%的覆蓋率已成爲最低測試要求。

扭曲的另一個常常被忽視的強度是它的十年計算出不同的平臺quirks。在不同的平臺上有很多未公開的套接字錯誤,並且很難知道它們存在,更不用說處理它們了。扭曲已經逐漸覆蓋了越來越多的這些,而且在這一點上它相當不錯。年輕的項目沒有這種經驗,所以他們錯過了晦澀的失敗模式,這可能只會發生在您發佈的任何項目的用戶身上,而不會發生在您身上。

所有這些都說,我發現Twisted最酷的是它是一個非常無聊的圖書館,讓我忽略了很多真正無聊的問題,只關注有趣和有趣的事情。 :)

+1

,並且您從關於資源抽象的鏈接看起來記錄很差。但是,謝謝你的回覆,提升。 – vinipsmaker 2014-03-06 02:03:11

+0

一個好處是,解釋「無證插座錯誤」。很好的解釋。謝謝。 – Haranadh 2017-03-17 08:42:04

8

那麼它可能根據口味。

Twisted允許您輕鬆創建事件驅動的網絡服務器/客戶端,而無需擔心完成此任務的所有內容。多虧了MIT License,Twisted幾乎可以在任何地方使用。但是我沒有做任何基準測試,所以我不知道它如何擴展,但我猜測相當不錯。

另一個優點是Twisted Projects,您可以快速瞭解如何實現大多數您想要的服務器/服務。

扭曲也有一些偉大的documentation,當我幾個星期前開始時,我能夠很快得到一個工作原型。

很新的蟒蛇現場請糾正我,如果我錯了我。

+4

從Twisted開始的一大優勢是,由於Twisted本身的設計方式,存在大量的可伸縮性問題,這些問題根本就沒有出現。它可以讓你繼續發現新的和創造性的方式來拍攝自己的腳,而不是在建立網絡應用程序時首先重新發現所有的世俗方法:) – ncoghlan 2011-03-28 12:44:33

+0

是作爲一個noobie自己與Twisted一起工作,那就是我很快發現。我非常喜歡這個架構讓我想起很多Netty [http://www.jboss.org/netty],我非常廣泛地使用它,所以思考的速度非常快。 – 2011-03-28 12:50:03