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比较强。

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