用于处理 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
的行为不同,后者不做这样的保证。