Ruby 限制分叉进程的数量

Ruby 限制分叉进程的数量,ruby,process,Ruby,Process,我试图处理一个数组,每个元素都需要一段合理的时间来处理(≈30分钟)。为了加速进程,我想使用fork,这样元素就可以在单独的进程中并行处理。然而,我的数组大约有1000个元素,我不想一次生成1000个分叉 我可以分批进行forks,然后用Process等待它们全部完成。waitall但是有没有一种方法可以在前一个流程结束后立即启动新流程?解决方案可以通过以下方式实现: # assign maximum number of processes counter = @max_processes #

我试图处理一个数组,每个元素都需要一段合理的时间来处理(≈30分钟)。为了加速进程,我想使用
fork
,这样元素就可以在单独的进程中并行处理。然而,我的数组大约有1000个元素,我不想一次生成1000个分叉


我可以分批进行
fork
s,然后用
Process等待它们全部完成。waitall
但是有没有一种方法可以在前一个流程结束后立即启动新流程?

解决方案可以通过以下方式实现:

# assign maximum number of processes
counter = @max_processes

# when a child process ends increase the counter of available processes
Signal.trap("CLD")  { counter += 1 }    

your_array.each do |element|

  # wait for a child process to end if there are no more "available processes"
  Process.wait if counter <= 0

  # before launching a process decrease the "available processes" counter
  counter -= 1

  fork {
    # do something with an element
  }

end
your_array.each_slice(@max_processes) do |elements|

  elements.each do |element|
    fork {
      # do something with an element
    }
  end

  Process.waitall

end