如何实现按计划执行任务?

Posted

技术标签:

【中文标题】如何实现按计划执行任务?【英文标题】:How to implement to do tasks by schedule? 【发布时间】:2019-10-07 19:21:57 【问题描述】:

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

【问题讨论】:

How do I get a Cron like scheduler in Python?的可能重复 【参考方案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

【讨论】:

【参考方案2】:

一个规范的解决方案是每 X 分钟运行一次 cronjob,它会在您的数据库中查找要执行的任务并为每个任务启动一个 celery 任务(因此任务执行是异步的)。你必须小心竞争条件,所以相同的任务不会同时执行两次(celery 任务应该检查并更新 db 任务状态,或者你可以使用 redis 作为任务锁)。

另外,celery already provides an ETA feature to program future tasks executions - 根据具体情况,这可能足以满足您的需求,也可能不够。

【讨论】:

以上是关于如何实现按计划执行任务?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC计划任务实现方法(定时执行某个功能)

Windows权限维持——计划任务

任务计划程序-Windows2008定时重启

如何实现数据实时同步

如何使用 Microsoft PPL 轻量级任务计划程序实现回退?

Linux基础学习-crond系统计划任务