Введение случайности времени с использованием cron и очереди задач - PullRequest
5 голосов
/ 11 апреля 2011

Я ищу немного инженерного творчества, чтобы решить проблему в Google App Engine.

У меня есть небольшое количество заданий, которые периодически запускаются, но я бы хотел, чтобы задания выполнялись в случайное время. Поэтому вместо того, чтобы запускать работу каждый вторник в 14:00, я бы хотел, чтобы она выполнялась каждый вторник «между 14:00 и 17:00».

В настоящее время я использую следующий алгоритм ...

  1. Задание Cron запускается каждый вторник в 14:00.
  2. Обработчик cron находит список конкретных заданий для запуска и создает событие очереди задач для каждой отдельной задачи.
  3. Соответствующий обработчик очереди задач решает, должен ли он действительно выполняться, выбирая случайное число от одного до N. Если случайное число равно X, задание выполняется. В противном случае он создает новое событие очереди задач для повторной попытки. Каждое задание имеет максимальное количество попыток очереди, чтобы гарантировать, что задание действительно завершится в какой-то момент.

Я понял, что другим решением было бы создание очереди задач с очень низкой скоростью, и когда задание cron заполняет очередь, оно случайным образом переупорядочивает список задач перед тем, как это сделать.

Есть идеи от пользователей App Engine?

1 Ответ

7 голосов
/ 11 апреля 2011

В 2 часа дня есть задание cron, которое ставит в очередь задачу со случайным обратным отсчетом от 0 до 3 часов?

...