ジョブのリストを取得し、それらをうさぎでキューに入れ、ワーカーがジョブをキューからポップして実行するシステムをルビー(rabbitmq、パラレルジェム)で構築しています。
ワーカーが準備が整ったときに単一のジョブをキューからポップするのは簡単ですが、各ワーカーに 5 つのスレッドを実行させて、5 つのスレッドすべてが処理されているときにワーカーがキューからジョブをポップしないようにしたいと考えています。 . スレッドが解放されると、ワーカーはキューからジョブを受け入れます。
Parallel gem を使用してマルチスレッド プロセスを作成する唯一の方法は、次のコードを使用することです。
results = Parallel.map(array, :in_processes => MAX_PROCESSES) do |item|
item.process
end
私は次のようなことをしたいと思います
while true
cur_threads = Parallel.get_cur_threads
if cur_threads < MAX_PROCESSES
# get another job from queue
# allocate a thread for the job
end
何か案は??