В торнадо 4.3 + python3, если у меня есть много слоев функции асинхронной, например:Торнадо: Распаковка много слоев будущего
@gen.coroutine
def layer_2():
return(yield async_func())
@gen.coroutine
def layer_1():
return(yield layer_2())
@gen.coroutine
def main():
return(yield layer_1())
Поскольку функция асинхронная возвращает будущее (получая это будущий возвращает его результат), чтобы получить возвращаемое значение async_func
в main
, я должен:
в каждом вызываемым, завернуть в будущее, выданное ответным заявлением
В каждого абонента, чтобы передать значение вверх вызывающую цепочку, выход вызываемого абонента и деформировать возвращаемое значение в ответном заявлении вновь
Есть в любом случае, чтобы избежать этого шаблона?
Да, я понимаю это, но не такой подход уродливый (дублирующий код)? Один из подходов, о котором я могу думать, заключается в том, чтобы удержаться в 'main()', пока возвращаемый результат больше не является будущим. –
Вот как справки предназначены для работы. Больше нет «дублирования», чем тот факт, что нормальным функциям Python все еще нужно ключевое слово «return». –
Спасибо! Просто хотел дважды проверить разумный улей, если я пропустил что-нибудь. Я правильно ответил на ваш ответ! –