我在 Rails 的 rake 任务中运行以下代码:
10.times do |i|
Thread.new do
puts "#{i}"
end
end
当我在本地运行此程序时,我得到以下信息: 0 3 5 1 7 8 2 4 9 6(有新行)
但是,当我通过相同的 rake 任务在 EC2 中运行相同的代码时,它可能会打印出一两行,然后任务将终止。我不知道为什么,但似乎我的 EC2 实例由于某种原因无法处理多线程。
有什么见解吗?
最佳答案
您在本地很幸运 - 没有任何东西可以保证您的 10 个线程在程序退出之前执行完成。如果您想等待线程,那么您必须显式地这样做:
threads = 10.times.collect do |i|
Thread.new do
puts i
end
end
threads.each(&:join)
join
方法会阻塞调用线程,直到指定的线程完成。它还返回该线程的返回值。
关于ruby-on-rails - EC2 中的 Ruby 多线程导致奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30689726/