我具有一些任务,这些任务保存在db中。我需要在某些时间执行任务。我对克朗或芹菜进行了兴趣,但我只看到功能像重复的动作一样,但是我需要及时地保存在我的数据库中。我该怎么做?
一个规范的解决方案是让每x分钟运行一个cronjob,以查找您的DB,以执行要执行的任务并为每个任务启动芹菜任务(因此,任务执行为异步(。您必须在比赛条件上要谨慎,因此不同时执行相同的任务(芹菜任务应检查和更新DB任务状态,或者您可以将REDIS用作任务锁(。
此外,芹菜已经为编程未来任务执行提供了ETA功能 - 根据上下文,它可能不足或不足。
我想您正在寻找芹菜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]
),
},
}
这是芹菜的文档:https://docs.celeryproject.org/en/latest/userguide/periodic-tasks.html