Rails中的多线程 - 如何合并线程

时间:2015-08-06 01:14:08

标签: ruby-on-rails ruby multithreading

我试图在Rails中多线程处理一个进程。我有一个名为modelA的大型数据集,我目前有一个流程将其划分为创建日期(每天多行),然后每天运行一个流程。最后,每天的结果按照它们发生的顺序添加到数组中。我如何多线程并将其返回?

  def function()
    ...
    if originalDate > Time.now - 60 * 60 * 24
      movingDate = Time.now - 60 * 60 * 24 * 31
    else
      movingDate = originalDate
    end
    begin
      dayFeed = newFeed.select{|obj| obj.created_at < movingDate + 60 * 60 * 24}
      dayFeed = dayFeed.select{|obj| obj.created_at > movingDate}
      … A lot of calculations to determine summary…
      b << summary
      totals = summary
      movingDate += 60 * 60 * 24
    end while movingDate <= Date.today
    [b, totals]

1 个答案:

答案 0 :(得分:1)

只需创建多线程并像func一样使用它们,收集在主线程中的数组中添加所有结果。

我已复制并浏览本教程中的部分代码 http://www.tutorialspoint.com/ruby/ruby_multithreading.htm 这应该可以解决你的问题:

count = 0
arr = []

10.times do |i|
   arr[i] = Thread.new {
      sleep(rand(0)/10.0)
      Thread.current["mycount"] = count
      count += 1
   }
end

arr.each {|t| t.join; print t["mycount"], ", " }
puts "count = #{count}"