【问题标题】:Execute code with random delay on Ruby在 Ruby 上随机延迟执行代码
【发布时间】:2015-12-28 16:35:27
【问题描述】:

我想随机延迟执行我的功能 我尝试了几种解决方案,但都没有奏效

我的代码是这样的

for i in (1..10)
  puts "Love Stack"
end

我已经试过了:

def every_n_seconds(n)
  loop do
      before = Time.now
      yield
      interval = n-(Time.now-before)
      sleep(interval) if interval > 0
  end
end

for i in (1..10)
  a = [1,2,3,4,5,6,7,8,9]
  a.shuffle!
  b = a[1]
    every_n_seconds(b) do
      for i in (1..10)
        puts "test"
      end
    end
end

你有解决办法吗?

【问题讨论】:

  • 您可以使用rand(10)方法生成一个0到9之间的随机数。不清楚您的代码的每次调用是否应该跟随随机延迟或相同的延迟但其值是随机选择的.
  • 你从你尝试过的代码中得到了什么行为/错误?

标签: ruby loops random time


【解决方案1】:

这是一种可能的方法 - 这里rand(10) 用于生成09 之间的随机数,该值用于休眠那么多秒。 sleep(n) 将休眠 n 秒。

def with_delay(n)
    puts "#{Time.new} Will sleep for #{n} seconds"
    sleep(n)

    puts "#{Time.new} Yielding now..."
    yield
end

5.times do
    with_delay(rand(10)) do
        puts "   Thanks for yielding"   
    end
end

输出:

2015-12-28 22:53:59 +0530 Will sleep for 1 seconds
2015-12-28 22:54:00 +0530 Yielding now...
   Thanks for yielding
2015-12-28 22:54:00 +0530 Will sleep for 0 seconds
2015-12-28 22:54:00 +0530 Yielding now...
   Thanks for yielding
2015-12-28 22:54:00 +0530 Will sleep for 7 seconds
2015-12-28 22:54:07 +0530 Yielding now...
   Thanks for yielding
2015-12-28 22:54:07 +0530 Will sleep for 5 seconds
2015-12-28 22:54:12 +0530 Yielding now...
   Thanks for yielding
2015-12-28 22:54:12 +0530 Will sleep for 2 seconds
2015-12-28 22:54:14 +0530 Yielding now...
   Thanks for yielding

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多