如何在红宝石中产生延迟

时间:2010-06-21 11:29:51

标签: ruby

如何在红宝石中产生延迟?

我使用了睡眠声明,但它没有给我我想要的东西。

puts "amit"
sleep(10)
puts "scj"

我希望它首先打印amit,然后延迟10秒,然后打印scj。

但是在上面的情况下会发生什么,它会暂停10秒然后它会打印amit和scj。我不希望这样。

我希望你得到我想说的话。

2 个答案:

答案 0 :(得分:9)

我无法重现这一点。从控制台,这完全符合您的期望:

puts "amit"
sleep 10
puts "scj"

(Linux上的Ruby 1.8.6)

你能提供一个类似的简短但完整的例子做你想做的事 - 或者更多地解释你的背景?

如果您正在编写Web应用程序,那么浏览器可能只会在编写完整个响应后才能看到任何数据 - 这可以解释您所看到的内容。如果是这种情况,您将需要一种不同的方法,允许首先写入初始响应,然后让浏览器再次发出请求。延迟可以在服务器或客户端,取决于没有情况。

答案 1 :(得分:8)

在睡眠呼叫前呼叫$stdout.flush。输出可能是缓冲的(尽管通常输出只是行缓冲,所以puts产生一个换行,应该没有刷新,但显然对你的终端不行。)