我有一个使用Celery的应用程序,我希望它只允许工作人员在一天中的某些时间之间运行任务。
例如:
我一直在关注Celery's Periodic Tasks,但这似乎只能设置执行任务的时间而不设置停止时间:
from celery.schedules import crontab
CELERYBEAT_SCHEDULE = {
# Executes every Monday morning at 7:30 A.M
'add-every-monday-morning': {
'task': 'tasks.add',
'schedule': crontab(hour=7, minute=30, day_of_week=1),
'args': (16, 16),
},
}
可能没有办法用Celery开箱即用,但我只是想在开始构建可以自动化的东西之前进行检查。
提前干杯!
答案 0 :(得分:0)
我认为你可以用芹菜中原生的东西做的最好的事情是将你的任务的expires
选项设置为2小时。
CELERYBEAT_SCHEDULE = {
# Executes every Monday morning at 7:30 A.M
'add-every-monday-morning': {
'task': 'tasks.add',
'schedule': crontab(hour=14),
'expires': 60 * 60 * 2, # 2 hours
...
您需要自己实现的其他功能。
答案 1 :(得分:0)
您可以动态add和cancel consumers for queues。只需设置一个cronjob,在凌晨2点添加消费者,在凌晨4点将其删除。您也可以使用计划的芹菜任务,但是您必须设置第二个队列以确保它被执行。
只需确保您的队列能够保存同时排队的所有任务。