Ruby中的多线程在EC2中导致奇怪的行为

时间:2015-06-07 03:15:38

标签: ruby-on-rails ruby multithreading amazon-web-services amazon-ec2

我在rails中的rake任务中运行以下代码:

10.times do |i|
    Thread.new do        
        puts "#{i}"
    end
end

当我在本地运行时,我得到以下内容: 0 3 五 1 7 8 2 4 9 6(新线)

然而,当我通过相同的rake任务在EC2中运行相同的代码时,它将打印出一两行,然后任务将终止。我不知道为什么,但似乎我的EC2实例由于某种原因无法处理多线程。

任何见解为什么?

1 个答案:

答案 0 :(得分:2)

你刚刚在本地获得了幸运 - 没有什么可以保证你的10个线程在你的程序退出之前执行完毕。如果你想等待你的线程,那么你必须明确地这样做:

threads = 10.times.collect do |i|
  Thread.new do
    puts i
  end
end

threads.each(&:join)

join方法阻塞调用线程,直到指定的线程完成。它还返回该线程的返回值。