如何在Ruby中扇出I / O绑定任务?

时间:2016-03-09 22:00:53

标签: ruby parallel-processing

我正在进行一系列AWS调用,以便从安全组创建/删除规则,并希望通过并行化来加快速度。

是否有一种通用方法可以在固定大小的集合中并行化I / O绑定操作?采用集合,批量大小和功能块的方法会很不错。

1 个答案:

答案 0 :(得分:2)

以下方法对我来说非常有效,产生了大约100倍的加速:

#  A method to parallelize an operation across a collection.
#  Example:
#
#  fan_out [1, 2, 3, 4], 2 do |batch|
#    puts batch.to_s
#  end
#
#  out >>
#  [3, 4]
#  [1, 2]
def fan_out(arr, num_batches, &block)
  threads = []
  arr.each_slice(arr.size / num_batches).each do |batch|
    threads << Thread.new {
      block.call(batch)
    }
  end
  threads.each(&:join)
end