мне нужно запустить несколько задач сельдерея в случайное время - каждый запуск должен быть в новое случайное время - при каждом запуске должно генерироваться случайное число.
что я делал в прошлом:
"my_task": {
"task": "path.to.my_task",
"schedule": crontab(minute='*/%s' % rand),
},
rand = random(1,12)
но этот код не подходит для моих нужд и более:
1. Мне нужно другое (по возможности со случайным числом0 для каждого арендатора
2. Каждый раз будет генерироваться другое число, а не только при загрузке settings.py (один раз )
Я попытался перезаписать расписание, как описано в ЭТО ответ, но это не сработало, есть ли лучший способ? я что-то пропустил?
(например, в арендаторе А задача будет выполняться в 23 часа и на следующий день в 8, а в арендаторе Б задача будет выполняться в 4 и на следующий день в 20 и т. д.)
Спасибо!
======== обновление ====
после отличного ответа, который я получил, я добавил опцию к своей задаче и обработал ее в методе apply_asynch, как было предложено-
.
"my-task": { # deprecated task
"task": "mdm_sync.tasks.test_task",
# "schedule": new_sc(),
"schedule": crontab(minute=39, hour=11),
"options": {
"eta": datetime.utcnow()
}
},
entry.options["eta"] = datetime.datetime.utcnow() + datetime.timedelta(seconds=random(3600,12*3600)
прекрасно работает!