2016-11-28 29 views
1

は通常、彼らはフラスコは、いくつかの非同期ツール(GEvent、asyncioなど)とサルパッチが適用される状況を参照してください同期フラスコ非同期を作る - 人々は「非同期」または「フラスコの非同期を作る」について話すときフラスコのインスタンスが

フラスコが、私はこのモデルがうまくいくかもしれないと思った「その場で作成」できるほど小さいことを考慮すると:

着信HTTP要求 - > HTTPサーバ(例えばnginxの/ apacheの) - > HTTP- request-queue - > Flaskインスタンス(各リクエストを処理するため)

あなたのコードを変更せずにサルパッチを実行すると、基本的にブロッキングコードを単独で処理することができます。いくつかの掘削後、私はそれを行うことができると信じて:

http://flask.pocoo.org/docs/0.11/deploying/wsgi-standalone/#twisted-web][1]

私の質問は以下のとおりです。

  1. は、イベント駆動型のコードを書くよりも効率このアプローチを使用していますか? (例:GEventまたはTornadoを使用)

  2. [1]がどのように要求を処理しているかはどのようなモデルですか? (上記と同じですか)

  3. 競合条件はありますか?例えば。最後のHTTPリクエスト(要求-2)は、第1のHTTP要求(リクエスト-1)の競合を引き起こして、(これは非同期要求処理に)最初に処理されているデータベースへの2つのコール

  4. を作る

    「このアプローチを」仮定すると、

答えて

1
  1. は効率があなたのアプリケーションが何をするかに依存して、同期フラスコとwisgiサーバーを使用することを意味します。それが比較的小さいアプリケーションであり、あまりにも多くの長時間実行されるタスクを必要としない場合、Gunicron + Flaskのようなものは優れたソリューションです。一方、外部サイトに多くのリクエストを送信したり、結果を返すのを待ったりするなど、アプリの実行時間が長い場合は、イベント駆動型アプローチ+プロキシ/ロードバランサをお勧めします。予測できないほどの遅延を伴うものは、一般的に非同期を使用して処理されます。

  2. 多かれ少なかれあなたの説明と同じです。

  3. もちろん、それは起こる可能性があります:それはWeb開発をとても面白くするものです。開発者は、そのような条件が最小限に抑えられるように、非常に慎重に設計する必要があります。

私の個人的な好みは、HTTPサーバーとロードバランサ+トルネード/ツイストの組み合わせとしてNginxです。同期または非同期の設計を使用する場合、この設定は柔軟性を最大限に引き出します。 Flaskの構文が好きなら、TwistedとWerkzeugを組み合わせたkleinという非常に良いプロジェクトがあります。

関連する問題