私が問題を理解しているように:
- 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 などの既存のメッセージ トランスポートの上にカスタム ソリューションを構築することもできます。