2017-04-24 1 views
0

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=Truemultithreaded=Trueで、開発モードでwsgiサーバー(gunicornではない)を組み込んだFlaskアプリケーションを実行しました。すべてのリクエストはまだnginxを通じてプロキシされていました。 JSONデータは非常に早く返されました(つまり、呼び出しがブロックされなかったようです)。

私はgunicornのドキュメントを読んでいます。外部APIへの呼び出しが必要な場合は、非同期作業者を使用する必要があります。私はそれらを使用しますが、動作しません。

すべてのキャッシングスタッフが考慮されました。私はキャッシュを使用しないと思うかもしれません。サーバーの設定を確認すると、すべてクリアされました。

私には何が欠けていますか?ガンコンを期待通りに動かすにはどうすればいいですか?

ありがとうございました。

答えて

0

私は実際にこの問題を非常に迅速に解決し、すぐに回答を投稿するのを忘れました。私が期待するように、gunicornサーバーが要求を非同期的に処理しなかった理由は、非常に単純で愚かでした。私は実行するのを忘れて

command = /path/to/project/env/bin/gunicorn -k gevent --worker-connections 1000 wsgi:app -b localhost:8500 

:私は設定を変更した後、私は上司を通じてgunicornを管理していたので

sudo supervisorctl reread 
sudo supervisorctl update 

これは、しかし、シンプルだが明白ではありません。私のミスは私がこのコマンドを使用してgunicornに私のアプリを再起動した後に設定を自動的に更新することが期待ということであった:

sudo supervisorctl restart my_app 

はい、それはアプリを再起動ではなくgunicornの設定。

関連する問題