from tornado.concurrent import Future
def async_call_method(fun, *args, **kwargs):
future = Future()
// 定义一个闭包 finish
def finish():
try:
result = fun(*args, **kwargs)
if future._callbacks:
IOLoop.current().add_callback(future.set_result, result)
else:
future.set_result(result)
except:
if future._callbacks:
IOLoop.current().add_callback(future.set_exc_info, sys.exc_info())
else:
future.set_exc_info(sys.exc_info())
child_gr = greenlet.greenlet(finish)
child_gr.switch()
return future
tornado 相关官方文档
Future 是一种用于并发编程的模式,首次引入是在 python 3.2 的 concurrent.futures 模块。
Future 对象是一个对于异步返回结果的占位符。
一个 Future 对象包含了一次异步操作的结果。在同步编程中,Futures 被用于等待从一个线程池或进程池里返回的结果;在 tornado 中,future 通常被用在