1

特定のサブプロセスの並列数を制限するためにセマフォを作成する必要があります。イベントレット ワーカーで gunicorn を使用しており、多くの同時接続を許可しています。ほとんどの場合、これらはリモート データを待機しています。ただし、それらはすべてある時点で処理フェーズに入り、これにはサブプロセスの呼び出しが含まれます。ただし、このサブプロセスは、メモリ/CPU を大量に消費するため、並行して頻繁に実行しないでください。

正しくthreading.Semaphoremonkey_patch'dであり、gunicorn内のイベントレットで使用できますか?

4

1 に答える 1

1

私が問題を理解しているように:

  • 1 つの gunicorn プロセス(これは非常に重要です) が N 個のグリーン スレッドを生成します
  • 各ワーカーは 1 つまたは複数のサブプロセスを生成できます
  • サブプロセスの総数を制限したい

この場合、はい、セマフォは期待どおりに機能します。

ただし、複数のプロセスがある場合は、セマフォの個別のインスタンスがあり、より多くのサブプロセスが観察されます。この場合、サブプロセスの責任を別のアプリケーションに移し、同じマシンで実行し、好きな API (RPC/socket/message queue/dbus/etc) 経由で呼び出すことをお勧めします。次のようにシステムを設計できます。

user -> gunicorn (any number of processes)
gunicorn -> one subprocess manager
manager -> N subprocesses

マネージャーは gunicorn からのジョブをリッスンし、必要に応じてサブプロセスを生成し、既存のサブプロセスを再利用する場合があります。Beanstalk、Celery、Gearman などのジョブ キュー システムが好きかもしれません。または、NSQ、RabbitMQ、ZeroMQ などの既存のメッセージ トランスポートの上にカスタム ソリューションを構築することもできます。

于 2014-03-06T10:27:30.110 に答える