如何按计划执行任务?

时间:2019-05-21 11:44:52

标签: python django cron celery

我有一些任务的django-project,这些任务保存在db中。我需要在一定时间内执行任务。我想到了cron或celery,但是我只能看到类似重复动作的功能,但是我需要及时做,并将其保存在数据库中。我该怎么办?

2 个答案:

答案 0 :(得分:1)

一个典型的解决方案是每隔X分钟运行一次cronjob,它会在数据库中查找要执行的任务,并为每个任务启动一个celery任务(因此任务执行是异步的)。但是,您必须注意比赛条件,以免同一任务同时执行两次(celery任务应检查并更新db任务状态,也可以将redis用作任务锁)。

此外,celery already provides an ETA feature to program future tasks executions-可能取决于上下文,不足以满足您的需求。

答案 1 :(得分:1)

我认为您正在寻找芹菜beat_schedule

app.conf.beat_schedule = {
    # Starts to run task on specific time.
    'your-task-name': {
        'task': 'your.tasks.path.name',
        'schedule': crontab(
            minute=[get it from database],
            hour=[get it from database]
        ),
    },
}

这是celery的文档:https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html