私が知る限り、Tornado はサーバーとフレームワークが一体になっています。Flask と Tornado を一緒に使用することは、別の抽象化レイヤーを追加するようなものです (オーバーヘッドが増えます)。Flask と Tornado を一緒に使用する理由、利点は何ですか?
4 に答える
この質問によると、それは Flask がブロックしていて、Tornado が非ブロックであるためです。
Tornado を WSGI サーバーとして使用し、Flask を URL ルーティング + テンプレートとして使用する場合、オーバーヘッドは発生しません。このアプローチでは、Flask の Web サーバーを使用していないため、抽象化の余分なレイヤーは実際にはありません。
ただし、テンプレートのためだけに Flask を使用している場合は、Flask が使用するテンプレート エンジンであるJinja2で Tornado を使用できます。
Flask と Tornado を一緒に使うのはばかげているといつも思っていましたが、実際には理にかなっています。ただし、複雑さが増します。私の好みは単に Tornado を使用することですが、Flask に接続している場合は、このセットアップが機能します。
Flask は (伝えられるところでは) 非常に使いやすく、Tornado よりもシンプルです。ただし、Flask には本番用の WSGI サーバーが必要です(または FCGI ですが、それはより複雑です)。Tornado を WSGI サーバーとしてセットアップするのは非常に簡単です。
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from yourapplication import app
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(5000)
IOLoop.instance().start()
この状況では、開発者は Flask アプリについて心配するだけで済みます。Tornado はサーバーとして機能します。
Tornado を使用して一部のリクエスト (たとえば、WSGI とうまく連携しない websocket) を処理することもできますが、それでもほとんどの作業は Flask で行います。理論的には、Flask のシンプルさと Tornado の非同期パフォーマンスが得られます。
サーバーとして Apache を使用する代わりに、Tornado を使用します (もちろん、WSGI の同期的な性質によるブロッキング サーバーとして)。