在任务

时间:2016-10-12 14:02:12

标签: python django celery django-celery celerybeat

我试图找到一种方法来获得触发芹菜击败任务的时间条件。

由于所有芹菜工人都很忙,获得datetime.now()经常偏离芹菜排队任务排队的时间。 例如:我将任务设置为每天12:30执行,但由于所有工作人员在12:31开始运行任务时都很忙。

无论执行任务的时间如何,我都需要知道触发任务的时间条件。

编辑:

这就是我定义周期性任务的方式:

CELERYBEAT_SCHEDULE = {
'periodic_clear_task': {
    'task': 'app.tasks.periodic_clear_task',
    'schedule': crontab(hour=2),
    'args': ()
},
'periodic_update_task': {
    'task': 'app.tasks.periodic_update_task',
    'schedule': crontab(minute='00,30'),
    'args': ()
},
}

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我想在定期芹菜任务中使用任务触发时间而不是执行时间。我在具有任务触发时间的芹菜任务中找不到确切的字段。作为一种解决方法,我使用了任务的过期时间。

task_expires_day =30

@app.on_after_configure.connect
def df_beat_setup(sender, **kwargs):
    pipeline_config = {}
    sender.add_periodic_task(
            crontab(
                    minute=0,
                    hour=8,
            ),
            df_scheduler_task.s(),
            args=(pipeline_config),
            name="df_trigger",
            queue="df_scheduler_queue",
            expires=60*60*24*task_expires_day,
            options={"time": datetime.now()}
    )


@app.task(name="df_scheduler_queue", bind=True, acks_late=True)
def df_scheduler_task(task: "celery.Task", pipeline_config: Dict, time: str) -> dict:
    task_trigger_time = parser.parse(task.request.expires)-timedelta(days=task_expires_day))
    
    ...