tornado.concurrent
— 使用 Future
对象¶
用于使用
Future
对象的实用工具。Tornado 以前提供自己的
Future
类,但现在使用asyncio.Future
。此模块包含用于以向后兼容 Tornado 旧的Future
实现的方式使用asyncio.Future
的实用函数。虽然此模块是 Tornado 内部实现的重要组成部分,但应用程序很少需要直接与其交互。
- class tornado.concurrent.Future¶
tornado.concurrent.Future
是asyncio.Future
的别名。在 Tornado 中,应用程序与
Future
对象交互的主要方式是awaiting
或yielding
它们在协程中,而不是在Future
对象本身调用方法。有关可用方法的更多信息,请参见asyncio.Future
文档。
- tornado.concurrent.run_on_executor(*args: Any, **kwargs: Any) Callable [source]¶
装饰器,用于在执行器上异步运行同步方法。
返回一个 future。
要使用的执行器由
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
参数。
- tornado.concurrent.chain_future(a: Future[_T], b: Future[_T]) None [source]¶
将两个 future 链在一起,以便当一个完成时,另一个也完成。
a
的结果(成功或失败)将被复制到b
,除非b
在a
完成之前已经完成或取消。版本 5.0 中变更: 现在接受 Tornado/asyncio
Future
对象和concurrent.futures.Future
。
- tornado.concurrent.future_set_result_unless_cancelled(future: Union[futures.Future[_T], Future[_T]], value: _T) None [source]¶
如果未取消,将给定的
value
作为Future
的结果设置。避免在取消的
asyncio.Future
上调用set_result()
时出现asyncio.InvalidStateError
。版本 5.0 中新增。
- tornado.concurrent.future_set_exception_unless_cancelled(future: Union[futures.Future[_T], Future[_T]], exc: BaseException) None [source]¶
将给定的
exc
作为Future
的异常设置。如果 Future 已经被取消,则记录异常。如果不需要此日志记录,调用者应显式检查 Future 的状态并调用
Future.set_exception
,而不是使用此包装器。避免在已取消的
asyncio.Future
上调用set_exception()
时出现asyncio.InvalidStateError
。版本 6.0 中的新增功能。
- tornado.concurrent.future_set_exc_info(future: Union[futures.Future[_T], Future[_T]], exc_info: Tuple[Optional[type], Optional[BaseException], Optional[TracebackType]]) None [source]¶
将给定的
exc_info
设为Future
的异常。同时支持
asyncio.Future
和 Tornado 早期版本中的扩展,以便在 Python 2 上提供更好的跟踪。版本 5.0 中新增。
版本 6.0 中的变更: 如果 future 已经被取消,此函数将不执行任何操作。 (以前会引发
asyncio.InvalidStateError
)
- tornado.concurrent.future_add_done_callback(future: futures.Future[_T], callback: Callable[[futures.Future[_T]], None]) None [source]¶
- tornado.concurrent.future_add_done_callback(future: Future[_T], callback: Callable[[Future[_T]], None]) None
安排在
future
完成时调用callback
。callback
使用一个参数调用,即future
。如果
future
已经完成,则立即调用callback
。这可能与Future.add_done_callback
的行为不同,后者没有这样的保证。版本 5.0 中新增。