Flaskで開発されたWebアプリケーションがあります。セットアップは簡単です。アプリはGunicornで動作しています。すべてのリクエストはnginxを介してプロキシされます。 Flaskアプリケーション自体は、外部APIへのHTTP要求を行います。フラスコアプリから外部APIへのHTTPリクエストは、フロントエンドのjavascriptコードからのAJAX呼び出しによって開始されます。外部APIは、JSON形式のデータをFlaskアプリケーションに返し、フロントエンドに戻します。Gunicorn非同期ワーカーで実行されたFlaskアプリは、devサーバより効率が悪いと表示されます
問題は、このアプリケーションをオプションmultithreaded = True
で開発モードで実行すると、JSONデータがサーバーに非同期で返され、結果がフロントエンドページで非常に素早く表示されることがわかります。
しかし、nginxとgunicornを使用してプロダクションモードでアプリを実行しようとすると、JSONデータが順番に返されることがわかります.1つずつゆっくりと終了します。なんらかの理由により、外部APIへのHTTP要求がブロックされるようです。
私はLinuxのUbuntu Server 16.04でスーパーバイザを使用しています。これは私が上司を介してガンコーンを開始する方法です。
command = /path/to/project/env/bin/gunicorn -k gevent --worker-connections 1000 wsgi:app -b localhost:8500
ガンコンは要求を非同期的に処理しないようです。
実験として私はdebug=True
とmultithreaded=True
で、開発モードでwsgiサーバー(gunicornではない)を組み込んだFlaskアプリケーションを実行しました。すべてのリクエストはまだnginxを通じてプロキシされていました。 JSONデータは非常に早く返されました(つまり、呼び出しがブロックされなかったようです)。
私はgunicornのドキュメントを読んでいます。外部APIへの呼び出しが必要な場合は、非同期作業者を使用する必要があります。私はそれらを使用しますが、動作しません。
すべてのキャッシングスタッフが考慮されました。私はキャッシュを使用しないと思うかもしれません。サーバーの設定を確認すると、すべてクリアされました。
私には何が欠けていますか?ガンコンを期待通りに動かすにはどうすればいいですか?
ありがとうございました。