tornado.concurrent
— 處理 Future
物件¶
用於處理
Future
物件的工具。Tornado 之前提供自己的
Future
類別,但現在使用asyncio.Future
。這個模組包含用於處理asyncio.Future
的工具函式,且這些函式與 Tornado 舊有的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 [原始碼]¶
裝飾器,用於在執行器上非同步執行同步方法。
會傳回 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 [原始碼]¶
將兩個 Future 鏈結在一起,使一個完成時,另一個也會完成。
除非
b
在a
完成時已經完成或取消,否則a
的結果 (成功或失敗) 將複製到b
。變更於版本 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 [原始碼]¶
如果未取消,則將給定的
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 [原始碼]¶
將給定的
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 [原始碼]¶
將給定的
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 [原始碼]¶
- 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。