Ruby脚本永远挂起

时间:2014-10-18 23:16:55

标签: ruby

这个小脚本应该生成用户指定数量的随机数并打印出来。它是一个多线程脚本,我认为这就是我的麻烦所在。我没有收到任何错误,但在运行时,脚本就会挂起。

num = []

while 0.upto ARGV[0].to_i do
  num << rand{254}
end

current_index = 0

while current_index < num.size

chunk = num[current_index, 5]
threads = []

chunk.each do |n|
  threads << Thread.new do
    puts n
  end
end

threads.each do |thread|
  thread.join
end

current_index += chunk.size
end

2 个答案:

答案 0 :(得分:1)

您不能将while循环用于upto

将其更改为:

0.upto ARGV[0].to_i do
  num << rand(254)
end

它运作正常(我已经将大括号改为卷曲大括号,因为我相信你希望254在这里成为参数)。


旁注:

记得在Ruby中编写线程程序时,CRuby有GIL - Global Interpreter Lock。因此,一次只能运行一个线程。如果你想要不同的行为 - 例如切换到jRuby。有关GIL的更多信息可以在f.e.找到。在这里:http://www.jstorimer.com/blogs/workingwithcode/8085491-nobody-understands-the-gil

答案 1 :(得分:1)

upto返回self,这是一个数字。非falsenil的所有内容在Ruby中都是真实的,包括数字。所以,你有一个while循环,其条件总是真实的,而且永远不会停止。