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

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

【问题讨论】:

标签: python django cron celery


【解决方案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 - 根据具体情况,这可能足以满足您的需求,也可能不够。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2016-05-24
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多