【发布时间】:2017-02-02 17:13:53
【问题描述】:
我需要在随机时间运行几个 celery 任务 - 每次运行都应该在一个新的随机时间 - 每次运行都应该生成随机数。
我过去做的是:
"my_task": {
"task": "path.to.my_task",
"schedule": crontab(minute='*/%s' % rand),
},
rand = random(1,12)
但是这段代码并不适合我的需求:
1. 我需要不同的(尽可能为每个租户使用 random0 号
2. 每次都会生成不同的数字,而不仅仅是在 settings.py 加载(一次)
我尝试按照THIS 答案中的说明覆盖日程安排,但没有奏效,有更好的方法吗?我错过了什么吗?
(例如,在租户 A 中,任务将在 23 点运行,后天在 8 点运行,在租户 B 中,任务将在 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)
效果很好!
【问题讨论】:
标签: python django celery celerybeat