用于处理 Future对象的实用程序。
Tornado 之前提供了自己的 Future类,但现在使用 asyncio.Future。 此模块包含用于与 Tornado 的旧 Future实现向后兼容的方式使用 asyncio.Future的实用程序函数。
虽然这个模块是 Tornado 内部实现的重要组成部分,但应用程序很少需要直接与其交互。
tornado.concurrent.Future 是 asyncio.Future 的别名。
在 Tornado 中,应用程序与 Future对象交互的主要方式是在协程中awaiting或yielding它们,而不是调用 Future对象本身的方法。
在 5.0 版更改:Tornado 的 Future实现已被 asyncio的版本取代(如果可用)。
Future对象只能在存在当前 IOLoop时创建Future.add_done_callback 安排的回调时间已更改。exc_info和 set_exc_info方法在 Python 3 上不再可用。装饰器在执行器上异步运行同步方法。
返回一个future。
要使用的executor由self的executor属性决定。 要使用不同的属性名称,请将关键字参数传递给装饰器:
@run_on_executor(executor='_thread_pool')
def foo(self):
pass
此装饰器不应与名称相似的 IOLoop.run_in_executor 混淆。 一般来说,建议在调用阻塞方法时使用 run_in_executor而不是在定义方法时使用此装饰器。 如果需要与旧版本的 Tornado 兼容,请考虑在调用站点定义执行器并使用 executor.submit()
在 4.2 版更改: 添加了关键字参数以使用替代属性。
在 5.0 版更改: 始终使用当前 IOLoop 而不是 self.io_loop。
在 5.1 版更改: 返回与 await兼容的 Future而不是 concurrent.futures.Future。
5.1 版后已弃用:callback参数已弃用,将在 6.0 中删除。 装饰器本身在新代码中不鼓励使用,但不会在 6.0 中删除。
在 6.0 版更改: callback参数已删除。
将两个 future 链接在一起,这样当一个完成时,另一个也完成。
a 的结果(成功或失败)将被复制到 b,除非 b 已经完成或在 a 完成时取消。
在 5.0 版更改: 现在接受 Tornado/asyncio Future对象和 concurrent.futures.Future。
如果未取消,则将给定值设置为 Future的结果。
在取消的 asyncio.Future上调用 set_result() 时避免 asyncio.InvalidStateError。
将给定的 exc设置为 Future的异常。
如果 Future已被取消,则改为记录异常。 如果不需要此日志记录,则调用者应显式检查 Future的状态并调用 Future.set_exception 而不是此包装器。
在取消的 asyncio.Future 上调用 set_exception() 时避免 asyncio.InvalidStateError。
将给定的 exc_info设置为 Future的异常。
了解 asyncio.Future 和旧版本 Tornado 中的扩展,以便在 Python 2 上实现更好的回溯。
5.0 版中的新功能。
在 6.0 版更改: 如果future已经取消,则此功能是空操作。 (以前会引发 asyncio.InvalidStateError)
安排在future完成时调用callback。
callback由future参数调用的。
如果 future已经完成,则立即调用callback。 这可能与 Future.add_done_callback 的行为不同,后者不做这样的保证。