twisted微線程:uthreads

地址:http://uthreads.googlecode.com

twisted是python中出名的異步網絡框架,包含很多網絡協議實現和功能,而且聽說性能也不錯。

不過開發twisted應用,需要使用它特殊的異步實現方式,需要了解Defered的用法,用起來有點彆扭。前些天,在google code裏面無意發現這個uthreads項目,它使用python2.5才具有的特性:yield,實現了twisted中的微線程,類似Twisted's DeferredGenerator。使用這個uthreads,我們就可以按類似線程的方法開發twisted應用,方便多了。

uthreads當前提供的examples:support-uthreaded.py,裏面有個bug,就是:

thatsnice = (self.getLine()).strip()

應該改成:thatsnice = (yield self.getLine()).strip()

看看該.py文件,微線程執行的部分代碼:

def handleCall(self):
    self.transport.write(">> Hello, Thank you for contacting Zune technical support.\n")
    self.transport.write(">> Please enter your name.\n")
    name = (yield self.getLine()).strip()
    self.transport.write(">> Welcome, %s!\n" % name)
    self.transport.write(">> Please state your problem.\n")
    problem = (yield self.getLine()).strip()

這個handleCall函數由微線程執行,可能需要切換時間片的代碼:yield self.getLine()。self.getLine函數返回str或者Defered類型,這裏,只需要對可能返回Defered的函數增加yield,就能實現微線程切換。而且這函數的返回值在handleCall代碼域中,只會是str或者Defered.callBack的結果值。之前不太瞭解yield,在看了uthreads後,又熟悉了幾分。

uthreads還提供能Timer,Lock,Queue等線程相關的功能,具體還是去看項目吧。

 

不過不知道使用uthreads會不會比直接使用Defered方式,性能差點?

最近剛好準備寫個針對某項目的網絡測試工具,看來使用uthreads也不錯。不過對於微線程,還有stackless可以選擇。準備使用twisted + stackless實現這個工具。微線程的性能,我想還是stackless比較強。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章