2011-12-21 4 views
0

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

Как я могу получить такую ​​частоту, не запуская ее все время?

+0

Когда вы запускаете чек? –

+0

Когда мой компьютер включен, я могу либо использовать 'crontab', либо' sleep', и позволить программе работать в фоновом режиме. Но я не знаю, какое решение на самом деле самое лучшее. – Cydonia7

+0

Вам нужно, чтобы он работал каждый день, по крайней мере один раз? Может ли он работать более одного раза в день? –

ответ

1

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

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 
+0

Действительно хорошая идея, я попробую что-то вроде этого;) – Cydonia7