python - Flask 阻塞的问题
伊谢尔伦
伊谢尔伦 2017-04-17 17:17:29
0
6
596
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全員に返信(6)
小葫芦

Flask に付属するサーバーは、明らかに本番環境では使用できません。個人的には、慎重に設計されたパラメーターを使用して、外側のレイヤーにも nginx を含めることをお勧めします (普遍的な公式はありません。実践に基づいて調整します) サーバー リソースの同時処理能力のより良いバランスを実現できます。つまり、同時実行テクノロジを使用せずに単一のプロセスを実稼働環境に配置することは絶対に不可能です。これは決して簡単ではありません。

私のこれまでの gevent の経験はそれほど素晴らしいものではなく (まだ 1.0 ではありませんでした)、モンキー パッチを適用すると追加の問題が発生する可能性がありました。ですので、特にお勧めするものではありません。

OAuth の話に戻りますが、問題は access_token を取得するステップにあると述べられているため、OAuth Authorization Code Grant プロセスが使用され、最終ステップに入るということになります。フローを確認してみましょう (OAuth 2 仕様から抜粋):

リーリー

理論的には、ブラウザーがステップ (C) を通じて Flask にリクエストを送信した後、ブラウザーでは他に何もすることはありません (その後の処理はプロセスの一部ではありません)。Flask は単純に 200 OK を返してデザインを行うことができます。後でブラウザが AJAX 経由で Flask にデータをリクエストすることで、Flask がステップ (D) を実行して (E) を待つ必要がなくなりました ((E) は問題が発生するステップです)。

もちろん、以前の並行処理と負荷分散が行われており、ユーザー数がそれほど多くない場合は、Flask は直接リクエストを行うことができます。もちろん、リクエストのサイズが十分に大きい場合、Flask は非同期タスクを開始し、特殊なタスク実行コンポーネントに操作を実行させることができます。

以前、私が開発したプロジェクトでは、RabbitMQ を介してタスクを送信するために celery を使用していました。完了までに一定の時間がかかるこれらのタスクは、特別なプログラムによって処理され、タスクの結果は Redis に保存され、毎回数千万件の同様のインターフェイス呼び出しが処理されます。日。

具体的には、リクエスト (C) が Flask に到達すると、Flask は RabbitMQ にタスクを送信し、200 OK を返します。対応するタスク実行コンポーネントはステップ (D) を実行し、応答 (E) を取得し、結果が Redis に書き込まれます。一定の時間が経過すると、ブラウザは再び Flask に後続の情報を要求します。このとき、Flask は Redis にアクセスしてタスクの実行が成功したかどうかをクエリし、それに応じて応答します。

これが質問者にとって役立つことを願っています。

いいねを押す +0
大家讲道理

gevent を使用して Flask を非同期にすることができます。

プログラムの先頭に次のように追加します:

リーリー

参考:

  • http://sergray.me/asynchony-in-the-flask.html

  • http://xlambda.com/gevent-tutorial/#monkey-patching

いいねを押す +0
伊谢尔伦

Flask は元々シングルスレッドです。wsgi を使用して、nginx や gunicorn などのサーバーを前に追加してマルチスレッドを実現できます。 Tornado はシングルスレッドかつ非同期なので、Flask とは互換性がないようです。

いいねを押す +0
巴扎黑

みんながこの問題をどうやって解決するか見てみましょう。恥ずかしい。 。 。

ps: 件名は DEBUG モードを使用しているため、ログを投稿できます。

ビューで urllib2 を使用して Google にアクセスしようとしましたが、それでも応答しましたが、最終的にエラーが報告されました:

テスト中、Flask 応答時間は確かに非常に遅かったです。この種の非同期タスクを処理するには、Celery を使用することをお勧めします。現在、Celery

の使用方法を学習しています。
いいねを押す +0
洪涛

ご自身の質問に答えるために、Flask ではマルチスレッドを有効にできますが、運用環境では依然として Nginx が必要です。

リーリー
いいねを押す +0
阿神

Flask の組み込み serverwerkzeug です。デフォルトの werkzeug はシングルスレッドであり、外部リクエストはブロックされます。 @Liu Yihan と入力してマルチスレッドを有効にできます。

Flask 自体はシングルプロセスおよびシングルスレッドではありません。実稼働環境では、マルチスレッドは uwsgi または gunicorn によって実装されます。 flask の使用法は正しいです。フラスコのデプロイメント方法は、uwsgigunicron、または gevent と組み合わせる必要があります。

非同期リクエストの結果を気にしない場合は、Redis を使用して単純なメッセージ キューを実装するか、セロリを使用して非同期リクエストを実装できます

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!