用于處理 ?Future
對象的實用程序。
Tornado 之前提供了自己的 ?Future
類,但現(xiàn)在使用 ?asyncio.Future
?。 此模塊包含用于與 Tornado 的舊 ?Future
實現(xiàn)向后兼容的方式使用 ?asyncio.Future
的實用程序函數(shù)。
雖然這個模塊是 Tornado 內部實現(xiàn)的重要組成部分,但應用程序很少需要直接與其交互。
?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
? 安排的回調時間已更改。exc_info
和 ?set_exc_info
方法在 Python 3 上不再可用。裝飾器在執(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ù)已刪除。
將兩個 future 鏈接在一起,這樣當一個完成時,另一個也完成。
a 的結果(成功或失敗)將被復制到 b,除非 b 已經完成或在 a 完成時取消。
在 5.0 版更改: 現(xiàn)在接受 Tornado/asyncio ?Future
對象和 ?concurrent.futures.Future
?。
如果未取消,則將給定值設置為 ?Future
的結果。
在取消的 ?asyncio.Future
上調用 ?set_result()
? 時避免 ?asyncio.InvalidStateError
?。
將給定的 ?exc
設置為 ?Future
的異常。
如果 ?Future
已被取消,則改為記錄異常。 如果不需要此日志記錄,則調用者應顯式檢查 ?Future
的狀態(tài)并調用 ?Future.set_exception
? 而不是此包裝器。
在取消的 ?asyncio.Future
? 上調用 ?set_exception()
? 時避免 ?asyncio.InvalidStateError
?。
將給定的 ?exc_info
設置為 ?Future
的異常。
了解 ?asyncio.Future
? 和舊版本 Tornado 中的擴展,以便在 Python 2 上實現(xiàn)更好的回溯。
5.0 版中的新功能。
在 6.0 版更改: 如果?future
?已經取消,則此功能是空操作。 (以前會引發(fā) ?asyncio.InvalidStateError
?)
安排在?future
?完成時調用?callback
?。
?callback
?由?future
?參數(shù)調用的。
如果 ?future
已經完成,則立即調用?callback
?。 這可能與 ?Future.add_done_callback
? 的行為不同,后者不做這樣的保證。
更多建議: