在龙卷风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包装在一个返回语句中
在每个调用者中,要将值传递给调用链,产生被调用者并再次在返回语句中扭曲返回的值
无论如何都要避免这种模式吗?
答案 0 :(得分:2)
这是从Tornado中的协同程序调用协同程序的正确方法。没有“避免这种模式的方法”,事实上这就是协同程序的设计工作方式!
有关详细信息,请参阅Tornado coroutines guide或我的Refactoring Tornado Coroutines。