Я пытаюсь запустить аккорд с 3 цепочками задач. Я использую сельдерей 4.3.0 и redis 5.0.3 в качестве посредника и бэкэнда.
chained = chord(
self.fetch_data.s(self.context, self.tenant, self.config, params)
| self.update_orders_table.s(self.context, self.tenant)
| self.archive_result.s(self.context, self.tenant)
for params in periods
),
self.build_kpis.si(self.context, self.tenant)
)
Каждая задача имеет автоповтор, такой как
@app.task(
bind=True, autoretry_for=(Exception,), retry_backoff=True, max_retries=3
)
def update_orders_table(self, result, context, tenant):
# some code
Код работает правильно, когда есть однако повторных попыток нет, иногда при повторных попытках аккорд застревает. Неудачные задачи были правильно перезапущены, и после того, как все задачи были выполнены успешно, я не наблюдал вызов обратного вызова.
Если я правильно понимаю, повторные попытки должны уменьшить счетчик аккордов, так что вызов обратного вызова не будет сделано до того, как все задачи действительно завершены. Это правильно?
Как я могу решить эту проблему?