2016-12-09 8 views
0

フラスコにオプションapp.run(threaded=True))を設定すると、私のサービスは複数の同時リクエストを処理できます。しかし、私のサービスは、複数の同時リクエストを処理するためにできるだけ多くのCPUリソースを消費するようです。 私のアプリで使用されているリソースを制限または制御する方法はありますか?フラスコ内の複数の同時リクエストの制御リソース

+0

私のアドバイスは、彼らの両方が、私はオプションでgunicornしようとしたシステムリソース – danidee

+0

を制御するためのオプションがあり、uwsgiのような優れたWSGIサーバを使用するか、またはフラスコの開発サーバーではないgunicornことです3000 myapp -bポート。 4つのリクエストがあるときに私のサービスが約8-10のプロセスを作成したため、私のケースでは動作しているのかどうかはわかりません(CPUリソースの半分をサービスに使用したいだけです)。 –

+0

私は、並列プロセスの数は、プロセッサのコア数の半分に等しくなければならないと考えています。例えば4コアCPU上の2つのプロセスは、リソースの50%しか消費できません。 – sytech

答えて

0

リソースモジュールを試すことができます。 this postから取られます。あなたはCPUのためにこれのような何かをするでしょう。 Here isリソースモジュール上のページ。

import resource 
sec = 60 * 60 # this is one hour of time. 
resource.setrlimit(resource.RLIMIT_CPU, sec) 

これは、プロセスがCPUで許可される時間(秒)を変更することに注意してください。プロセスのスタック/ヒープサイズを制限する場合は、resource.RLIMIT_STACKresource.RLIMIT_HEAPを使用する必要があります。これらはバイト単位であるため、コードは次のようになります。 gunicorn --workers = 4 -t:

import resource 
mem = 1024 * 1024 # this is one megabyte, you want much more than this normally 
resource.setrlimit(resource.RLIMIT_STACK, mem) 
resource.setrlimit(resource.RLIMIT_HEAP, mem) 
+0

これは矛盾しますか?私のサービスはマルチプロセッシングであるため、各リクエストを処理するために4つのプロセスが作成されます。 –

+0

いいえ、マルチプロセッシングは、スレッドのように見えなくてもスレッドを使用します。プロセスは単一のプログラムであり、プログラムが別のプログラムを開始するとスレッドとして開始する必要があります。私はこれについて間違っているかもしれません。あなたはスレッドとして起動しなければならないかもしれませんが、私はPythonのマルチプロセスがどのように動作するのか分かりません。それがうまくいかない場合は、各プロセスで同じことを行うだけで、それぞれのリソースの量を制限できます。 –

+0

実際には、wsgiサーバー(gunicorn)が私の問題を解決しました。 –

関連する問題