回答:
開発サーバーを実行している場合-これを実行app.run()
すると、単一の同期プロセスが取得されます。つまり、一度に最大で1つのリクエストが処理されます。
デフォルトの構成でGunicornをその前に固定し、の数を増やすだけで--workers
、基本的には、それぞれがapp.run()
開発サーバーのように動作する(Gunicornによって管理される)プロセスの数が得られます。4ワーカー== 4同時リクエスト。これは、Gunicornがsync
デフォルトで含まれるワーカータイプを使用するためです。
Gunicornも、すなわち、非同期の労働者が含まれていることに注意することが重要であるeventlet
とgevent
(ともtornado
、それはトルネードフレームワークで使用するのが最善です、それはそう)。これらの非同期ワーカーの1つを--worker-class
フラグで指定すると、Gunicornが多数の非同期プロセスを管理し、それぞれが独自の同時実行性を管理します。これらのプロセスはスレッドを使用せず、代わりにコルーチンを使用します。基本的に、各プロセス内で同時に発生できるのは1つだけ(1スレッド)ですが、オブジェクトが外部プロセスの終了を待機している場合(データベースクエリやネットワークI / Oを待機している場合など)、オブジェクトは「一時停止」できます。
つまり、Gunicornの非同期ワーカーの1つを使用している場合、各ワーカーは一度に複数のリクエストを処理できます。最適なワーカーの数は、アプリの性質、環境、アプリが実行されるハードウェアなどによって異なります。詳細については、Gunicornのデザインページと、イントロページでのgeventの動作に関するメモをご覧ください。
現在、すでに提供されているソリューションよりもはるかに簡単なソリューションがあります。アプリケーションを実行するときは、次のようにthreaded=True
パラメーターをapp.run()
呼び出しに渡すだけです。
app.run(host="your.host", port=4321, threaded=True)
werkzeug docsで確認できる別のオプションは、processes
パラメーターを使用することです。このパラメーターは、処理する並行プロセスの最大数を示す1 より大きい数値を受け取ります。
- スレッド化–プロセスは各要求を個別のスレッドで処理する必要がありますか?
- プロセス– 1より大きい場合、この最大数の同時プロセスまで、新しいプロセスの各要求を処理します。
何かのようなもの:
app.run(host="your.host", port=4321, processes=3) #up to 3 processes
ここでのrun()
メソッドの詳細と、ソリューションとAPIリファレンスを見つけるためのブログ投稿。
注:上のフラスコドキュメントにrun()
方法、(ので、プロダクション環境でそれを使用することが推奨されていることを示しています引用は:)それはうまくスケールしないよう、「軽量で使いやすい一方で、フラスコに内蔵されているサーバーは、生産には適していません」
ただし、本番環境への移行時にこれを行うための推奨方法については、導入オプションページを参照しています。
いいえ、あなたは間違いなくそれ以上のものを扱うことができます。
シングルコアマシンを実行している場合、CPUは実際には一度に1つの命令のみを実行することを前提としています。
つまり、CPUは非常に限られた命令セットしか実行できず、クロックティックごとに複数の命令を実行できません(多くの命令は1ティックを超える場合もあります)。
したがって、コンピュータサイエンスで私たちが話している同時実行性のほとんどはソフトウェアの同時実行性です。言い換えると、最下位レベルのCPUを抽象化し、コードを同時に実行していると思わせるソフトウェア実装のレイヤーがあります。
これらの「もの」はプロセスとすることができます。これは、各プロセスが独自の非共有メモリを使用して独自の世界で実行していると考えるという意味で同時に実行されるコードの単位です。
もう1つの例はスレッドです。これは、同時実行を可能にするプロセス内のコードの単位でもあります。
4つのワーカープロセスが4つを超えるリクエストを処理できるようになるのは、それらがより多くのリクエストを処理するためにスレッドを起動するためです。
実際のリクエスト制限は、選択したHTTPサーバー、I / O、OS、ハードウェア、ネットワーク接続などによって異なります。
幸運を!
*命令は、CPUが実行できる非常に基本的なコマンドです。例-2つの数値を追加し、1つの命令から別の命令にジャンプする