tornado.concurrentFuture オブジェクトの操作

Future オブジェクトを操作するためのユーティリティ。

Tornadoは以前、独自の Future クラスを提供していましたが、現在は asyncio.Future を使用しています。このモジュールには、Tornadoの古い Future 実装との下位互換性を維持しながら、asyncio.Future を操作するためのユーティリティ関数が含まれています。

このモジュールはTornadoの内部実装の重要な部分ですが、アプリケーションが直接対話する必要はめったにありません。

class tornado.concurrent.Future

tornado.concurrent.Futureasyncio.Future のエイリアスです。

Tornadoでは、アプリケーションが Future オブジェクトと対話する主な方法は、Future オブジェクト自体のメソッドを呼び出すのではなく、コルーチン内で awaiting または yielding することです。利用可能なメソッドの詳細については、asyncio.Future のドキュメントを参照してください。

バージョン 5.0 で変更: Tornadoの Future の実装は、可能な場合は asyncio のバージョンに置き換えられました。

  • Future オブジェクトは、現在の IOLoop が存在する場合にのみ作成できます。

  • Future.add_done_callback でスケジュールされたコールバックのタイミングが変更されました。

  • キャンセルが部分的にサポートされるようになりました(Python 3のみ)。

  • exc_info および set_exc_info メソッドは、Python 3では使用できなくなりました。

tornado.concurrent.run_on_executor(*args: Any, **kwargs: Any) Callable[ソース]

executorで同期メソッドを非同期的に実行するためのデコレーター。

futureを返します。

使用するexecutorは、selfexecutor 属性によって決定されます。別の属性名を使用するには、デコレーターにキーワード引数を渡します。

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

このデコレーターは、同様の名前の IOLoop.run_in_executor と混同しないでください。一般的に、ブロッキングメソッドを呼び出す場合は、このデコレーターをメソッドを定義する場合に使用するのではなく、run_in_executor を使用することをお勧めします。古いバージョンのTornadoとの互換性が必要な場合は、executorを定義し、呼び出しサイトで executor.submit() を使用することを検討してください。

バージョン 4.2 で変更: 代替属性を使用するためのキーワード引数を追加しました。

バージョン 5.0 で変更: self.io_loop の代わりに、常に現在の IOLoop を使用します。

バージョン 5.1 で変更: concurrent.futures.Future の代わりに、await と互換性のある Future を返します。

バージョン 5.1 から非推奨: callback 引数は非推奨となり、6.0 で削除されます。デコレーター自体は新しいコードでは推奨されていませんが、6.0 では削除されません。

バージョン 6.0 で変更: callback 引数が削除されました。

tornado.concurrent.chain_future(a: Future[_T], b: Future[_T]) None[ソース]

2つのfutureをチェーンして、一方が完了したらもう一方が完了するようにします。

a の結果(成功または失敗)は、a が完了するまでに b がすでに完了またはキャンセルされていない限り、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[ソース]

キャンセルされていなければ、指定されたvalueFutureの結果として設定します。

キャンセルされたasyncio.Futureset_result()を呼び出す際のasyncio.InvalidStateErrorを回避します。

バージョン5.0で新規追加されました。

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

指定されたexcFutureの例外として設定します。

Futureが既にキャンセルされている場合は、代わりに例外をログに記録します。このロギングが不要な場合は、呼び出し側でFutureの状態を明示的に確認し、このラッパーの代わりにFuture.set_exceptionを呼び出す必要があります。

キャンセルされたasyncio.Futureset_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_infoFutureの例外として設定します。

Python 2でのより良いトレースバックを可能にするために、asyncio.FutureとTornadoの古いバージョンの拡張の両方を理解します。

バージョン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を1つの引数として呼び出されます。

futureが既に完了している場合、callbackはすぐに呼び出されます。これは、そのような保証をしないFuture.add_done_callbackの動作とは異なる場合があります。

バージョン5.0で新規追加されました。