Рубин: частота рандов силы - PullRequest
0 голосов
/ 21 декабря 2011

Мне нужно запускать фрагмент кода в произвольно выбранные моменты времени, но, например, я должен запускать его примерно раз в день.Программа не работает все время, поэтому я не могу заставить ее работать каждый час и делать что-то вроде if rand(1..24) == 1

Как мне добиться такой частоты, не запуская ее все время?

1 Ответ

1 голос
/ 21 декабря 2011

Программе каким-то образом нужно учитывать прошедшее время с момента последнего запуска, чтобы повысить вероятность того, что она будет выполняться, чем дольше она не выполняется.Пример использования сна:

def diff_in_hours(time1, time2)
  ((time1 - time2) / 3600) 
end

start = Time.now
loop do
  hours_since_last_run = diff_in_hours(Time.now, start).to_i
  # execution gets more and more likely the longer the last
  # run is in the past
  execute if [0, nil].include? rand(0..(24 - hours_since_last_run))
  sleep(60*60) # sleep one hour
end
...