web-dev-qa-db-ja.com

TornadoとFlask=を一緒に使用するのはなぜですか?

私が知る限り、Tornadoはサーバーであり、1つのフレームワークです。 FlaskとTornadoを一緒に使用することは、別の抽象化レイヤーを追加するようなものです(オーバーヘッドが増える)。なぜ人々はFlaskとTornadoを一緒に使用するのでしょうか、利点は何ですか?

35
3k-

この質問 によれば、Flaskはブロッキングで、Tornadoはノンブロッキングです。

TornadoをWSGIサーバーとして使用し、Flask URLルーティング+テンプレート用 を使用する場合、オーバーヘッドはありません。このアプローチでは、FlaskのWebサーバーを使用していません。 、したがって、実際には余分な抽象化層はありません。

ただし、テンプレートにFlaskのみを使用している場合、Tornadoを Jinja2 とともに使用できます。これはFlask= 。

52

私はいつもFlaskとTornadoを一緒に使うのは愚かだと思っていましたが、実際には理にかなっています。しかし、複雑さが増します。このセットアップは機能します。

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でNiceを再生しないWebソケットなど)を処理し、Flaskで作業の大部分を実行することも可能です。理論的には、Tornadoの非同期パフォーマンスでFlaskの単純さが得られます。

17
Cole Maclean

サーバーとしてApacheを使用する代わりに、Tornadoを使用します(もちろん、WSGIの同期的な性質によるブロッキングサーバーとして)。

2
Abdelouahab Pp

優れた機能を使用するためにそれぞれを使用しますが、目的のパフォーマンスが常に得られるとは限らないことを考慮してください。

このベンチマーク https://Gist.github.com/andreif/6088558 は、たとえば、どのフレームワークの組み合わせが高速であるかを疑問視するため、サンプルをメインのユースケースに適合させる必要があります。この例では、flask + tornadoは期待されるパフォーマンスの向上を提供しません。

0
Rogelio