twisted中defer的关键用法

来源:互联网 发布:java异常处理关键字 编辑:程序博客网 时间:2024/06/04 01:18

1.deferred是通过调用callback或则errback来启动(需要传入参数),如果errback传入的是字符串,则默认转换为twisted.python.failure.DefaultException。

2.defered仅仅只能调用一次,多次调用会触发AlreadyCalledError的异常,这帮助阻止了一个事件被多次处理的情况。

3.在第N层的callback和errback由第N+1层的errback和errback链处理,如果第N层抛出异常(raise Exception)或则返回一个Failure,则由第N+1的errback处理,如果N+1已经终止,则程序会停止执行,会抛出一个Unhandled Error异常。如果没有Failure返回或则没有抛出异常,则继续由N+1的callback进行处理。依赖于回调的返回结果,执行流程将会在errback和callback之间来回交叉执行。

4.通过deferred回调链返回的结果会作为参数传递给下一个回调层。

5.每次增加一个回调,都会增加一个回调层。例如

  addCallback(),增加一个正确回调,和一个默认的失败回调

  addErrback(),增加一个错误回调,和一个默认的成功回调

  addBoth(),同时增加相同的错误回调和正确回调。

 

0 0