如何实现按计划执行任务?
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 - 根据具体情况,这可能足以满足您的需求,也可能不够。
【讨论】:
以上是关于如何实现按计划执行任务?的主要内容,如果未能解决你的问题,请参考以下文章