tornado.platform.asyncio
— asyncio
とTornadoのブリッジ¶
asyncio
モジュールとTornado IOLoop間のブリッジ。
バージョン3.2の新機能。
このモジュールは、Python 3.4で導入されたasyncio
モジュールとTornadoを統合します。これにより、同じイベントループ上で2つのライブラリを組み合わせることが可能になります。
バージョン 5.0 で非推奨: このモジュールのコードは引き続き使用されますが、asyncio
が利用可能な場合は自動的に有効になるため、アプリケーションでこのモジュールを直接参照する必要はなくなりました。
注記
Tornadoは、セレクターベースのイベントループを使用するように設計されています。Python 3.8以降、プロアクターベースのイベントループがデフォルトになっているWindowsでは、別のスレッドでselect
を実行することでセレクターイベントループがエミュレートされます。asyncio
をセレクターイベントループを使用するように設定すると、Tornadoのパフォーマンスが向上する可能性があります(ただし、同じプロセス内の他のasyncio
ベースのライブラリのパフォーマンスが低下する可能性があります)。
- class tornado.platform.asyncio.AsyncIOMainLoop(*args: Any, **kwargs: Any)[source]¶
AsyncIOMainLoop
は、現在のasyncio
イベントループ(つまり、asyncio.get_event_loop()
によって返されるもの)に対応するIOLoop
を作成します。バージョン 5.0 で非推奨: 適切な場合は自動的に使用されるようになりました。このクラスを直接参照する必要はなくなりました。
バージョン 5.0 で変更:
AsyncIOMainLoop
を閉じると、基盤となる asyncio ループも閉じられるようになりました。
- class tornado.platform.asyncio.AsyncIOLoop(*args: Any, **kwargs: Any)[source]¶
AsyncIOLoop
は、asyncio
イベントループ上で動作するIOLoop
です。このクラスは、新しいIOLoops
を作成するための通常の Tornado セマンティクスに従います。これらのループは、必ずしもasyncio
デフォルトイベントループに関連付けられているわけではありません。各
AsyncIOLoop
は、新しいasyncio.EventLoop
を作成します。このオブジェクトには、asyncio_loop
属性を使用してアクセスできます。バージョン 6.2 で変更: デフォルトポリシーで常に新しいループを作成するのではなく、アタッチする asyncio ループを指定するための明示的な
asyncio_loop
引数をサポートします。バージョン 5.0 で非推奨: 適切な場合は自動的に使用されるようになりました。このクラスを直接参照する必要はなくなりました。
- tornado.platform.asyncio.to_tornado_future(asyncio_future: Future) Future [source]¶
asyncio.Future
をtornado.concurrent.Future
に変換します。バージョン4.1の新機能。
バージョン 5.0 で非推奨: Tornado
Futures
はasyncio.Future
に統合されたため、このメソッドは現在何もしません。
- tornado.platform.asyncio.to_asyncio_future(tornado_future: Future) Future [source]¶
Tornadoのイールド可能なオブジェクトを
asyncio.Future
に変換します。バージョン4.1の新機能。
バージョン 4.3 で変更:
tornado.concurrent.Future
だけでなく、あらゆるイールド可能なオブジェクトを受け入れるようになりました。バージョン 5.0 で非推奨: Tornado
Futures
はasyncio.Future
に統合されたため、このメソッドは現在tornado.gen.convert_yielded
と同等です。
- class tornado.platform.asyncio.AnyThreadEventLoopPolicy[source]¶
任意のスレッドでループ作成を許可するイベントループポリシー。
デフォルトの
asyncio
イベントループポリシーは、メインスレッドでのみイベントループを自動的に作成します。他のスレッドは、明示的にイベントループを作成するか、asyncio.get_event_loop
(したがってIOLoop.current
) を使用しないと失敗します。このポリシーをインストールすると、5.0より前のTornadoバージョン(またはPython 2の5.0)の動作に合わせて、任意のスレッドでイベントループを自動的に作成できます。使用方法
asyncio.set_event_loop_policy(AnyThreadEventLoopPolicy())
バージョン5.0の新機能。
バージョン 6.2 で非推奨:
AnyThreadEventLoopPolicy
は、イベントループの暗黙的な作成に影響しますが、これは Python 3.10 で非推奨となり、将来のバージョンの Python で削除される予定です。その時点で、AnyThreadEventLoopPolicy
は役に立たなくなります。これに依存している場合は、イベントループを必要とするメインスレッド以外のスレッドで、asyncio.new_event_loop
またはasyncio.run
を明示的に使用してください。
- class tornado.platform.asyncio.SelectorThread(real_loop: AbstractEventLoop)[source]¶
バックグラウンドの選択スレッドで呼び出される
add_reader
メソッドを定義します。このクラスのインスタンスは、セレクターを実行するための2番目のスレッドを開始します。このスレッドはユーザーからは完全に隠されています。すべてのコールバックは、ラップされたイベントループのスレッドで実行されます。
通常は
AddThreadSelectorEventLoop
を介して使用されますが、実行中の asyncio ループにアタッチすることもできます。
- class tornado.platform.asyncio.AddThreadSelectorEventLoop(real_loop: AbstractEventLoop)[ソース]¶
イベントループをラップして、
add_reader
メソッドファミリの実装を追加します。このクラスのインスタンスは、セレクターを実行するための2番目のスレッドを開始します。このスレッドはユーザーからは完全に隠されています。すべてのコールバックは、ラップされたイベントループのスレッドで実行されます。
このクラスはTornadoによって自動的に使用されます。アプリケーションが直接参照する必要はありません。
このクラスで任意のイベントループをラップすることは安全ですが、
add_reader
メソッドファミリを自身で実装していないイベントループ(つまり、WindowsProactorEventLoop
)に対してのみ意味があります。AddThreadSelectorEventLoop
を閉じると、ラップされたイベントループも閉じます。