其他分享
首页 > 其他分享> > twisted笔记一:Deferred笔记(搬运)

twisted笔记一:Deferred笔记(搬运)

作者:互联网

twisted笔记一:Deferred笔记(搬运)

最近在研究twisted,但官方文档写的太简洁,网上信息太少,于是翻墙找到了一位大佬的博客,找到了一些信息。
转自:https://sites.google.com/site/mypynotes/twisted-1/deferred

Deferred的简单套路

从twisted的文档入手,将Deferred独立出来简单的说明作用与使用方法,这样更能快速对Deferred有深刻的了解。

一、学习资料

  1. 主要参考资料官方文档http://twistedmatrix.com/projects/core/documentation/howto/deferredindepth.html关联译文
    http://wiki.woodpecker.org.cn/moin/twistedTUT00?action=AttachFile&do=get&target=deferred_tutorial.html(此链接将会下载离线文档)
  2. 关联资源http://wiki.woodpecker.org.cn/ moin/TwistedTUT

二、Deferred的作用

Deferred的主要作用可以用一句话比较形象说明,“不要打电话给我,我会打给你的(Don’t Call Us, We’ll Call You) ”。相当于做好计划后,执行交给Deferred,完成后再找我,我可要到一边Happy去了。它会根据callback运行结果(正常、发生例外)从callback链表中选择执行已注册的相应的callback函数,从而实现事件方式来驱动程序。callback的运行不影响主程序的运行,Deferred.callback执行后马上返回。(这点有待在后面证明)

三、Deferred实例

from twisted.internet import defer d=defer.Deferred()实例化后就可以对Deferred进行操作。

四、callback链表

链表是用来放置callback函数,链表中的函数可以响应三类事件,正常结束、例外结束、任意(包括前面两者),它们分别用addCallback、addErrback、addBoth注册到链表中。也就是说函数正常结束返回调用addCallback注册的函数,发生例外则调用addErrback注册的函数,使用addBoth注册的函数无论返回什么结果都会被调用。

五、callback函数注册

除了上面提过的addCallback、addErrback、addBoth三个注册函数外,还有另外一个addCallbacks可以同时注册处理正常结束和例外结束的函数。

def deferredExample():
    d = defer.Deferred()
    d.addCallback(failAtHandlingResult)
    d.addCallbacks(yesDecision, noDecisionPassthru)
    d.addCallback(handleResult) # - A -
    d.addErrback(handleFailure)

上面代码中第4行的addCallbacks效果如同
d.addCallback(yesDecision)
d.addErrback(noDecisionPassthru)

另外,我们也可以将注册过程写成下面形式。
d=refer.Deferred().addCallback(failAtHandlingResult).addCallbacks(yesDecision, noDecisionPassthru).addCallback(handleResult).addErrback(handleFailure)

六、callback链执行顺序

Deferred的链表是按顺序从第一个注册函数开始直到最后一个函数。如果发生例外时,有多个例外处理函数,则会调用发生例外函数下面第一个例外处理函数。后面的例外处理函数将不会被调用,除非第一个例外处理函数将这个例外向下传递。

七、其它一些特性

Deferred实例中还有另外一些函数,如pause,unpause,setTimeout,timeoutCall,chainDeferred,这些将留作下一步的测试。
另外还没涉及到的是Deferred上一级的defer库中的函数及其它类的使用,从一些代码看来这些函数将会进一步有利于Deferred的应用,但这也有待后面的进上步学习。

八、总结

经过Deferred are beautiful一节学习,了解Deferred的使用方法及其事件响应机制。

标签:函数,callback,twisted,笔记,链表,Deferred,例外,addCallback
来源: https://blog.csdn.net/huangzyi/article/details/112559998