hackstar15
hackstar15

Reputation: 1469

Multithreading in Ruby in EC2 causing weird behavior

I have the following code that I run in a rake task in rails:

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

When I run this locally, I get the following: 0 3 5 1 7 8 2 4 9 6 (with new lines)

However, when I run the same code in EC2 via the same rake task, it will print out maybe one or two lines, and then the task will terminate. I'm not sure why, but it seems my EC2 instance can't handle the multithreading for some reason.

Any insights why?

Upvotes: 2

Views: 95

Answers (1)

Frederick Cheung
Frederick Cheung

Reputation: 84114

You've just been getting lucky locally - there is nothing that guarantees that your 10 threads will execute to completion before your program exits. If you want to wait for your threads then you must do so explicitly:

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

threads.each(&:join)

The join method blocks the calling thread until the specified thread has completed. It also returns the return value of that thread.

Upvotes: 2

Related Questions