等待龙卷风未来完成

时间:2016-06-23 09:54:10

标签: python tornado

我有一个返回未来的功能。我想为函数创建一个装饰器,等待将来完成,然后返回结果,实际上将异步函数转换为阻塞函数(我将在我的REST API中使用)。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:4)

def sync(fn):
    def wrapped(*args, **kwargs):
        return IOLoop.instance().run_sync(lambda: fn(*args, **kwargs))

    return wrapped

@gen.coroutine
def my_coro():
    # ...

sync_fn = sync(my_coro)
result = sync_fn()

答案 1 :(得分:0)

要解决未来,您需要yield它。这样的事情可能有用:

from tornado import gen    

def blocking(func):
    def new_func(*args, **kwargs):
        result = yield func(*args, **kwargs)
        return result
    return gen.coroutine(new_func)