2016-01-14 1 views
2

Итак, у меня есть обратный вызов цепь, что-то вроде этого:Python Twisted - Возвращение к цепи обратного вызова после errback

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

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

deferred.addBoth(end) 

входов запуска в начале() - который также является Errback. В начале создается отложенная. Он имеет 4 этапа обработки, от cb1 до cb4. Если все будет хорошо, вход должен пройти через 4 этапа обработки и, наконец, в конце() - из addBoth.

Если что-то пошло не так (в cb1 или cb2 и т. Д.), Они должны пойти в start(), где вход будет «повторно принят» несколько раз. Если повторений больше нет или если что-то не так происходит в start(), оно должно перейти в eb1, а не в конец().

Моя проблема в том, что даже если есть повторы для определенного ввода, он по-прежнему идет на eb1, а не в конец.

Как я могу сделать мой отложенный возврат к цепочке обратного вызова, если он встречает ошибку?

enter image description here

Теперь, если, например, у меня есть ошибка в CB2, отсроченные идет к С, но даже если она до сих пор попытки, он все еще идет в ЕВ1. Как я могу это исправить?

Спасибо!

+0

Это звучит как интересная проблема, но http://sscce.org было бы очень полезно, чтобы действительно понять специфику вашей проблемы, чтобы гарантировать, что предлагаемое решение будет работать. – Glyph

ответ

0

Короче говоря, если EB1 вызывается после START, тогда START должен возвращать какое-то значение отказа. Вот как Twisted знает, следует ли идти по цепочке обратного вызова или цепочке ошибок.

Смежные вопросы