Python Twisted - 在errback之后返回回调链

时间:2016-01-14 11:13:59

标签: python asynchronous callback twisted deferred

所以,我有一个回调链,就像这样:

deferred = create_deferred()
deferred.addCallback(cb1)
deferred.addCallback(cb2)
deferred.addCallback(cb3)
deferred.addCallback(cb4)

deferred.addErrback(start)
deferred.addErrback(eb1)

deferred.addBoth(end)

输入从start()开始 - 这也是一个Errback。在开始时,创建延迟。它有4个处理步骤,cb1到cb4。如果一切顺利,输入应该经过4个处理步骤,最后是end() - 来自addBoth。

如果一路上出现问题(在cb1或cb2等中),他们应该转到start(),其中输入将被重试"几次。如果没有更多的重试或者start()中发生了错误,它应该转到eb1而不是end()。

我的问题是,即使某个输入有重试,它仍会转到eb1而不是最终。

如果遇到错误,如何将延迟返回到回调链?

enter image description here

现在,例如,如果我在CB2中有错误,则延迟转到START,但即使它仍然有重试,它仍然会转到EB1。我该如何解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

简而言之,如果在START之后调用EB1,那么START必须返回某种失败值。这就是Twisted如何知道是沿着回调链还是错误回归链。