Предположим, что я хочу запускать задачу один раз в час, но с переменным временем в течение часа. Это не должно быть по-настоящему случайным; Например, я просто не хочу делать это в верхней части часа каждый час. И я хочу делать это один раз в час.Как выбрать случайное время один раз в час
Это устраняет несколько очевидных подходов, таких как спящий случайный промежуток времени от 30 до 90 минут, а затем снова спящий. Было бы возможно (и, скорее всего,), чтобы задача выполнялась несколько раз подряд со сном чуть более 30 минут.
Подход, о котором я думаю, выглядит следующим образом: каждый час, хеш-отметка времени в Unix, и мода результата на 3600. Добавьте результат к отметке времени Unix часа, и это тот момент, когда задача должна выполняться. В псевдокоде:
while now = clock.tick; do
// now = a unix timestamp
hour = now - now % 3600;
hash = md5sum(hour);
the_time = hour + hash % 3600;
if now == the_time; then
do_the_work();
end
end
я уверен, что это будет соответствовать моим требованиям, но я думал, что это было бы интересно, чтобы бросить этот вопрос и посмотреть, что идеи других людей!
Но завтра в 9:00 утра не то же самое Отметка времени Unix, как сегодня в 9:00 утра, поэтому будет другой вход. Я пренебрег тем, что использовал временную метку Unix. Обновит вопрос. –
Я не уверен, что я точно следую. Если общая продолжительность составляет, например, 10 часов, вы хотите, чтобы задача выполнялась ровно десять раз? –
Хороший вопрос. Я вижу, я действительно не высказывал предположения. Это длительная (работает навсегда?) Программа, которая петли раз в секунду.Это делает кучу работы каждую секунду. Один раз в час, но с переменным временем, я хочу, чтобы он выполнял еще одну небольшую задачу. –