Использование повторов для задач в аккорде блокирует вызов на обратный вызов - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь запустить аккорд с 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

Код работает правильно, когда есть однако повторных попыток нет, иногда при повторных попытках аккорд застревает. Неудачные задачи были правильно перезапущены, и после того, как все задачи были выполнены успешно, я не наблюдал вызов обратного вызова.

Если я правильно понимаю, повторные попытки должны уменьшить счетчик аккордов, так что вызов обратного вызова не будет сделано до того, как все задачи действительно завершены. Это правильно?

Как я могу решить эту проблему?

...