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