2

我在 celery beat 中设置了一个任务,每 2 分钟运行一次。它基于self.dbObject = Patch.find_by_status('READY') 我打开工作程序的数据库对象的存在进行 if 循环,并且代码运行良好。但是当我将数据库从READY状态切换到任何其他状态时,这不会反映在下一次运行中。芹菜会在某处缓存这些数据吗?我没有为 celery 使用后端配置。如果这是缓存,我可以以某种方式禁用或删除它吗?

工人重启有帮助。但我的应用负担不起。

def petchme(self):
    self.dbObject = Patch.find_by_status('READY')
    if self.dbObject:
        print('Patch this')
    else:
        print('No patchgroup(s) in pipeline')
4

2 回答 2

1

芹菜会在某处缓存这些数据吗?

不,celery 不会缓存您的数据库访问。更有可能是您的Patch班级正在做某种缓存。如果你真的想要,你甚至可以在执行一些任务(比如 1)后设置 celery 来杀死工人。

于 2019-01-20T22:39:14.593 回答
0

谢谢@2ps,这就是问题所在。我的 DbObject 没有从数据库中获取最新数据,添加 db.session.commit() 有助于解决问题。

def petchme(self):
    db.session.commit()
    self.dbObject = Patch.find_by_status('READY')
    if self.dbObject:
        print('Patch this')
    else:
        print('No patchgroup(s) in pipeline')
于 2019-01-22T03:39:38.120 回答