Tornado 使用 Future 對象

2022-03-11 11:13 更新

用于處理 ?Future對象的實用程序。

Tornado 之前提供了自己的 ?Future類,但現(xiàn)在使用 ?asyncio.Future?。 此模塊包含用于與 Tornado 的舊 ?Future實現(xiàn)向后兼容的方式使用 ?asyncio.Future 的實用程序函數(shù)。

雖然這個模塊是 Tornado 內部實現(xiàn)的重要組成部分,但應用程序很少需要直接與其交互。

class tornado.concurrent.Future

?tornado.concurrent.Future? 是 ?asyncio.Future? 的別名。

在 Tornado 中,應用程序與 ?Future?對象交互的主要方式是在協(xié)程中?awaiting?或?yielding?它們,而不是調用 ?Future對象本身的方法。

在 5.0 版更改:Tornado 的 ?Future實現(xiàn)已被 ?asyncio的版本取代(如果可用)。

  • ?Future?對象只能在存在當前 ?IOLoop時創(chuàng)建
  • 使用 ?Future.add_done_callback? 安排的回調時間已更改。
  • 現(xiàn)在部分支持取消(僅在 Python 3 上)
  • ?exc_info和 ?set_exc_info方法在 Python 3 上不再可用。

tornado.concurrent.run_on_executor(*args, **kwargs) → Callable

裝飾器在執(zhí)行器上異步運行同步方法。

返回一個?future?。

要使用的?executor?由?self?的?executor?屬性決定。 要使用不同的屬性名稱,請將關鍵字參數(shù)傳遞給裝飾器:

@run_on_executor(executor='_thread_pool')
def foo(self):
    pass

此裝飾器不應與名稱相似的 ?IOLoop.run_in_executor? 混淆。 一般來說,建議在調用阻塞方法時使用 ?run_in_executor而不是在定義方法時使用此裝飾器。 如果需要與舊版本的 Tornado 兼容,請考慮在調用站點定義執(zhí)行器并使用 ?executor.submit()?

在 4.2 版更改: 添加了關鍵字參數(shù)以使用替代屬性。

在 5.0 版更改: 始終使用當前 IOLoop 而不是 ?self.io_loop?。

在 5.1 版更改: 返回與 ?await兼容的 ?Future而不是 ?concurrent.futures.Future?。

5.1 版后已棄用:?callback?參數(shù)已棄用,將在 6.0 中刪除。 裝飾器本身在新代碼中不鼓勵使用,但不會在 6.0 中刪除。

在 6.0 版更改: ?callback?參數(shù)已刪除。

tornado.concurrent.chain_future(a: Future[_T], b: Future[_T]) → None

將兩個 future 鏈接在一起,這樣當一個完成時,另一個也完成。

a 的結果(成功或失敗)將被復制到 b,除非 b 已經完成或在 a 完成時取消。

在 5.0 版更改: 現(xiàn)在接受 Tornado/asyncio ?Future對象和 ?concurrent.futures.Future?。

tornado.concurrent.future_set_result_unless_cancelled(future: Union[futures.Future[_T], Future[_T]], value: _T) → None

如果未取消,則將給定值設置為 ?Future的結果。

在取消的 ?asyncio.Future 上調用 ?set_result()? 時避免 ?asyncio.InvalidStateError?。

tornado.concurrent.future_set_exception_unless_cancelled(future: Union[futures.Future[_T], Future[_T]], exc: BaseException) → None

將給定的 ?exc設置為 ?Future的異常。

如果 ?Future已被取消,則改為記錄異常。 如果不需要此日志記錄,則調用者應顯式檢查 ?Future的狀態(tài)并調用 ?Future.set_exception? 而不是此包裝器。

在取消的 ?asyncio.Future? 上調用 ?set_exception()? 時避免 ?asyncio.InvalidStateError?。

tornado.concurrent.future_set_exc_info(future: Union[futures.Future[_T], Future[_T]], exc_info: Tuple[Optional[type], Optional[BaseException], Optional[traceback]]) → None

將給定的 ?exc_info設置為 ?Future的異常。

了解 ?asyncio.Future? 和舊版本 Tornado 中的擴展,以便在 Python 2 上實現(xiàn)更好的回溯。

5.0 版中的新功能。

在 6.0 版更改: 如果?future?已經取消,則此功能是空操作。 (以前會引發(fā) ?asyncio.InvalidStateError?)

tornado.concurrent.future_add_done_callback(future: Union[futures.Future[_T], Future[_T]], callback: Callable[[...], None]) → None

安排在?future?完成時調用?callback?。

?callback?由?future?參數(shù)調用的。

如果 ?future已經完成,則立即調用?callback?。 這可能與 ?Future.add_done_callback? 的行為不同,后者不做這樣的保證。


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號