ruby-on-rails - EC2 中的 Ruby 多线程导致奇怪的行为

标签 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 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/

相关文章:

c - 循环线程中的 pthread_barrier_t

java - 有没有办法将参数传递给Runnable?

ruby-on-rails - puma systemd 脚本不启动 puma

php - Windows 上的多个 Web 开发环境

html - 使用 Rails 难以掌握 Controller

ruby-on-rails - 我如何使用路由别名改进重定向

ruby - Ruby Blocks 有简写吗?

jquery - 如何存储和访问站点的 JSON 数据?

arrays - ruby assoc array 是内部的哈希表吗?什么是查找时间复杂度?

java - 生产者消费者请求取消