作者归档:notedit
twisted系列教程十三–deferred 中的deferred
Part 13: Deferred All The Way Down 原文:http://krondo.com/blog/?p=2159 作者:dave 译者:notedit 时间:2011.06.26 Introduction 回想一下第十部分的poetry client 5.1,client 用一个deferred 来管理一个callback 链,这个callback 链中调用了一个transformation 引擎,在client 5.1 中,这个引擎是作为一个同步的函数来实现的. 现在我们想写一个新的client,让它利用我们在第十二部分写的transformation service.问题就来了:既然transformation service 是通过网络访问的,我们需要用异步的I/O.这就意味着我们用来请求transformation 的api 是异步的.也就是说我们的try_to_cummingsify callback 会返回一个Deferred 对象 在一个deferred 链中的callback 返回另一个deferred 的时候会发生什么?让我们把第一个deferred 叫做外部的deferred 第二个deferred 叫做内部的deferred.假设在外部的deferred 中callback N … 继续阅读
twisted系列教程十二–为server 增加一个service
Part 12: A Poetry Transformation Server 原文:http://krondo.com/blog/?p=2101 作者:dave 译者:notedit 时间:2011.06.25 One More Server 在第九部分和第十部分我们介绍了关于诗歌的变形引擎的想法,最后我们实现了cummingsifier,我们还让它抛出随机的异常来模拟错误.但是假如这个变形的引擎在另外一台服务器上,提供一种网络的”poetry transformation service”, 那么现在又多出来一种出错的方式:变形引擎挂掉了. 所以在第十二部分我们将要实现一个poetry transformation server,并在下一部分,我们让我们的client 使用一个外部的transformation service,并从中学到Deferred 的一些东西. Designing the Protocol 到现在为止client 和server 端的交互都是单向的,server 端向client端发送一首诗,而client 什么也向server 发送.但是一个transformation service 是双向的– client 端向server发送一首诗然后服务端发送给client 一首变形后的诗.所以我们需要一个新的protocol来处理这种交互. 在我们实现这个的时候,我们让server 支持多种的变形方式,并让client 可以选择使用哪一种.所以client … 继续阅读
twisted系列教程十一 — 一个twisted 的服务端
Part 11: Your Poetry is Served 原文:http://krondo.com/blog/?p=2048 作者:dave 译者:notedit 时间:2011.06.23 A Twisted Poetry Server 既然我们已经学了这么多twisted client 的编写,现在让我们来用twisted来重新实现一下我们的poetry server 吧.我们要多谢谢twisted 抽象的普遍性,貌似我们已经学了twisted 的我们需要知道的大部分东西了.看下我们的twisted poetry server twisted-server-1/fastpoetry.py,它被叫做fastpoetry 应为这个server可以尽可能快的发送一首诗.它的代码要比cilent 中的代码要少. 让我们一次分析一小段的代码,首先,PoetryProtocol: class PoetryProtocol(Protocol): def connectionMade(self): self.transport.write(self.factory.poem) self.transport.loseConnection() 就像client 一样,server 用了一个单独的protocol 实例来管理每一个不同的连接.这里的protocol 是我们server端的poetry protocol.因为我的protocol 是严格的单向的(one-way不知道怎么翻译),server … 继续阅读
twisted系列教程十–可以变化的诗
Part 10: Poetry Transformed 原文:http://krondo.com/blog/?p=1956 作者:dave 译者:notedit 时间:2011.06.22 Client 5.0 现在我们将要想我们的client中加入一些变形逻辑.但是首先我不得不说:我不知道怎样写一个Byronification 引擎,它超出我的能力范围了.做为替代,我会实现一个相对简单的变形–Cummingsifier.Cummingsifier 是可以把一首诗变成令一首cumming风格的诗的算法.下面就是这个算法的实现: def cummingsify(poem) return poem.lower() 不幸的是,这个算法很简单以至于很难失败,所以在client 5.0 版本中在 twisted-client-5/get-poetry.py中,我们用了一个可以随机出现以下结果的算法: 返回一个正常的结果 抛出一个GibberishError错误 抛出一个ValueError 错误 通过这种方法我们模拟了一个有时返回异常的复杂的算法. 在client 5.0 中唯一变化的是poetry_main 函数: def poetry_main(): addresses = parse_args() from twisted.internet import reactor poems … 继续阅读
twisted系列教程九–Deferred 的第二个小插曲
Part 9: A Second Interlude, Deferred 原文:http://krondo.com/blog/?p=1825 作者:dave 译者:notedit 时间:2011.06.21 More Consequence of Callbacks 我们将要再来研究一下callback,尽管我们已经对deferred比较了解而且已经可以写出twisted 风格的异步程序,Deferred 类提供了更多的特色来进行处理一些更复杂的设置.所以我们要想出一些更复杂的设置来看看用callback编程的时候能给我们造成哪些挑战.然后我们会研究deferred是怎样处理这些挑战的. 为了激发我们继续讨论,我们将会向我们的poetry client增加一个新的功能.假设某的蛋痛的科学家发明出了一个特别的算法,这个算法可以将一首诗变成另一首诗.而且我们的导师提供了一个参照的实现,用下面的接口来实现: class IByronificationEngine(Interface): def byronificate(poem): “”" Return a new poem like the original, but in the style of Lord Byron. Raises GibberishError … 继续阅读