龙卷风:打开未来的许多层

时间:2017-01-06 07:03:22

标签: python function asynchronous tornado future

在龙卷风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函数返回Future(让Future返回其结果),要在async_func中获取main的返回值,我必须:

  • 在每个被调用者中,将产生的Future包装在一个返回语句中

  • 在每个调用者中,要将值传递给调用链,产生被调用者并再次在返回语句中扭曲返回的值

无论如何都要避免这种模式吗?

1 个答案:

答案 0 :(得分:2)

这是从Tornado中的协同程序调用协同程序的正确方法。没有“避免这种模式的方法”,事实上这就是协同程序的设计工作方式!

有关详细信息,请参阅Tornado coroutines guide或我的Refactoring Tornado Coroutines