tornado.wsgi
— 他のPythonフレームワークおよびサーバーとの相互運用性¶
Tornado WebフレームワークのWSGIサポート。
WSGIはWebサーバーのPython標準であり、Tornadoと他のPython Webフレームワークおよびサーバー間の相互運用性を可能にします。
このモジュールは、WSGIContainer
クラスを介してWSGIサポートを提供します。これにより、Tornado HTTPサーバー上で他のWSGIフレームワークを使用するアプリケーションを実行することが可能になります。逆はサポートされていません。TornadoのApplication
クラスとRequestHandler
クラスは、TornadoのHTTPServer
での使用を想定しており、汎用WSGIコンテナでは使用できません。
- class tornado.wsgi.WSGIContainer(wsgi_application: WSGIAppType, executor: Optional[Executor] = None)[ソース]¶
WSGI互換アプリケーションをTornadoのHTTPサーバーで実行できるようにします。
警告
WSGIは*同期*インターフェースですが、Tornadoの並行性モデルはシングルスレッドの*非同期*実行に基づいています。効率的なロングポーリングやWebsocketなど、Tornadoの多くの際立った機能はWSGIモードでは使用できません。
WSGIContainer
の主な目的は、単一のプロセスでWSGIアプリケーションとネイティブTornadoRequestHandlers
の両方をサポートすることです。WSGIのみのアプリケーションは、gunicorn
やuwsgi
などの専用WSGIサーバーを使用する方が良いでしょう。WSGIアプリケーションを
WSGIContainer
でラップすると、TornadoHTTPServer
request_callback
インターフェースを実装できます。WSGIContainer
オブジェクトは、tornado.routing
モジュールのクラス、tornado.web.FallbackHandler
、またはHTTPServer
に直接渡すことができます。このクラスは、他のフレームワーク(Django、Flaskなど)をTornado HTTPサーバーとI/Oループ上で実行できるようにすることを目的としています。
現実的な使用方法はより複雑になりますが、最も単純な例では、手書きのWSGIアプリケーションと
HTTPServer
を使用しますdef simple_app(environ, start_response): status = "200 OK" response_headers = [("Content-type", "text/plain")] start_response(status, response_headers) return [b"Hello world!\n"] async def main(): container = tornado.wsgi.WSGIContainer(simple_app) http_server = tornado.httpserver.HTTPServer(container) http_server.listen(8888) await asyncio.Event().wait() asyncio.run(main())
推奨されるパターンは、
tornado.routing
モジュールを使用して、WSGIアプリケーションと、通常はtornado.web.Application
の間のルーティングルールを設定することです。あるいは、tornado.web.Application
をトップレベルのルーターとして使用し、tornado.web.FallbackHandler
内にWSGIContainer
を埋め込むことができます。executor
引数が指定されている場合、WSGIアプリケーションはそのexecutor上で実行されます。これはconcurrent.futures.Executor
のインスタンスである必要があり、通常はThreadPoolExecutor
です(ProcessPoolExecutor
はサポートされていません)。executor
が指定されていない場合、アプリケーションはTornado 6.3のイベントループスレッド上で実行されます。これはTornado 7.0ではデフォルトで内部スレッドプールを使用するように変更されます。警告
デフォルトでは、WSGIアプリケーションはイベントループのスレッド上で実行されます。これにより、サーバーは一度に1つのリクエスト(プロセスごと)に制限され、他のほとんどのWSGIサーバーよりもスケーラビリティが低下します。そのため、アプリケーションがスレッドセーフであることを確認した後、
WSGIContainer
を構築するときにThreadPoolExecutor
を渡すことを強くお勧めします。デフォルトはTornado 7.0でThreadPoolExecutor
を使用するように変更されます。バージョン 6.3 で追加:
executor
パラメータ。バージョン 6.3 で非推奨: イベントループスレッドでWSGIアプリケーションを実行するデフォルトの動作は非推奨となり、Tornado 7.0ではデフォルトでスレッドプールを使用するように変更されます。
- environ(request: HTTPServerRequest) Dict[str, Any] [ソース]¶
tornado.httputil.HTTPServerRequest
をWSGI環境に変換します。バージョン 6.3 で変更: 静的メソッドではなくなりました。