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