Задачи Celerybeat получают ту же информацию, даже если она изменилась. (возможно кеширование) Как я могу отключить это

У меня есть задача, настроенная в ритмах сельдерея, которая запускается каждые 2 минуты. Он использует цикл if, основанный на существовании объекта БД self.dbObject = Patch.find_by_status('READY'), я включаю работника, и код работает нормально. Но когда я переключаю БД из состояния READY в любое другое состояние, это не отражается на следующем запуске. Сельдерей где-то кэширует эти данные? Я не использую внутреннюю конфигурацию для сельдерея. Если это кеширование, могу ли я его как-то отключить или удалить?

Рестарт рабочего помогает. но мое приложение не может себе этого позволить.

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

person Suhail Mirza    schedule 18.01.2019    source источник


Ответы (2)


Сельдерей где-то кэширует эти данные?

Нет, сельдерей не кэширует ваши обращения к базе данных. Скорее всего, ваш класс Patch выполняет какое-то кэширование. Если вы действительно хотите, вы даже можете настроить сельдерей на уничтожение рабочих после выполнения некоторого количества задач (например, 1).

person 2ps    schedule 20.01.2019

Спасибо @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')
person Suhail Mirza    schedule 22.01.2019