2

常に実行されている 2 つのサブプロセス (RabbitMQ consumerおよびRabbitMQ producer) があるアプリケーションがあります (ほとんどの場合、アイドル状態です)。しかし、プロセスの状態に基づいて、別のN数のサブプロセスを生成する必要もあります (それを呼び出します) 。Worker processRabbitMQ consumer

そのWorker processesため、非常に軽量で、多くの計算を行う必要はありませんが、ホエーの作業には長い時間がかかります (最大 1 時間)。マシン自体には 4 つ以下の CPU コアしかありません。でアプリを実行する予定ですCentOS。質問: このような多くの (1 から 20 と予想される) 軽量プロセスが行き来し、ほとんどの場合アイドル状態になっても問題ないでしょうか?

私が最初に考えたのは、1 つのサブプロセス ( Worker process) を作成し、内部でスレッドを使用することでした。multiprocessingしかし、ミキシングやthreadingモジュール化に苦労している人たちの話を聞いたことがあります。それは本当ですか?

ちなみに、私のアプリは Python 2.7 で、multiprocessingモジュールを使用してサブプロセスを生成します。

4

1 に答える 1

6

あなたの説明に基づいて、先に進んで、最大 20 のジョブに対して複数のプロセスを作成することをお勧めします。API を使用multiprocessingすると、これが非常に簡単になります。最も貴重なリソースは自分の時間です。並行プログラミングの複雑さはすぐに手に負えなくなる可能性があるため、できる限りの支援が必要です。

詳細

ワーカー プロセスがI/O バウンドである場合、(ほぼ間違いなく) 多くのプロセスを使用しても CPU への影響はありません。私の Windows では、現在 145 の実行中のプロセスがリストされていますが、マシンはアイドル状態であると見なされます。コードが定期的に呼び出していることを確認してください。ここで、ポーリングの「妥当な」一時停止時間です。または、マルチプロセッシングの接続オブジェクトとそのメソッドなど、それを行うライブラリを使用していることを確認してください。time.sleep(x)x.poll(x)

ワーカー プロセスがCPU バウンドである場合は、空き CPU と同じサイズのプロセス プールを設定し、ジョブをキューにプッシュして、プール内のプロセスがキューからジョブを取得できるようにすることをお勧めします。 . multiprocessingこのパラダイムをうまくサポートしています。

ワーカーが異なる時間に CPU バウンドと I/O バウンドの両方になる可能性がある場合、注意が必要です。この場合、1 つのプロセスを CPU 作業用に予約 (専用) しておき、そのプロセスでジョブをキューから取り出し、他の多くの (I/O) プロセスでジョブを作成して作業キューにプッシュすることをお勧めします。1 つの CPU コアが処理できる速度を超えて作業が入ってくる場合は、2 つ目の専用コアを追加するか、キューに最大サイズを設定して、I/Oワーカーにキュー サイズを監視させ、新しい作業を追加できるかどうかを認識させます。

I/O バウンドのワーカーが非常に多い場合は、 asyncioTwistedgeventeventletgreenletなどのイベントベースのフレームワークに注目する必要があります。これは、生成された OS スレッドまたはプロセスごとに予約メモリ コストが発生し、数千のインスタンスになると、予約スペースが追加され始めるためです。一方、イベントベースのシステムは複数のスレッドを生成せず、I/O デバイス インターフェイスをループして、イベントに基づいてデータを蓄積するだけです。イベントベースのネットワーキングを使用すると、非常に多数の同時接続をサポートできます。

Windows では、複数のスレッドとプロセスの測定限界に関する優れた記事がここにあります。ドキュメントをすばやくスキャンすると、最大プロセス数に対して最大 10k の制限が見つかったことがわかります。私はこれが別の場所でThe 10k problemとして言及されているのを見たことがありますが、現在私が利用できるリファレンスはありません。

CPU バウンドのワーカーが多数ある場合は、分散コンピューティングを使用して、ジョブをさまざまな個別のマシンにプッシュする必要があります。 multiprocessingこれも API 経由でサポートされていManagerますが、個人的な経験はありません。ZeroMQ は現在、分散メッセージングの処理で人気があるようです。

于 2013-10-10T23:19:02.800 に答える