我在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实例由于某种原因无法处理多线程。
任何见解为什么?
答案 0 :(得分:2)
你刚刚在本地获得了幸运 - 没有什么可以保证你的10个线程在你的程序退出之前执行完毕。如果你想等待你的线程,那么你必须明确地这样做:
threads = 10.times.collect do |i|
Thread.new do
puts i
end
end
threads.each(&:join)
join
方法阻塞调用线程,直到指定的线程完成。它还返回该线程的返回值。