这个小脚本应该生成用户指定数量的随机数并打印出来。它是一个多线程脚本,我认为这就是我的麻烦所在。我没有收到任何错误,但在运行时,脚本就会挂起。
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
答案 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
,这是一个数字。非false
或nil
的所有内容在Ruby中都是真实的,包括数字。所以,你有一个while
循环,其条件总是真实的,而且永远不会停止。