Как отключить повтор в сельдерее?

Я запускаю планировщик celerybeat каждые 15 минут, где мне нужно получить данные из API (ограничение скорости = 300 запросов / мин. Максимум) и сохранить результаты в базе данных. Я хотел бы получить URL-адреса параллельно с учетом ограничений скорости в то же время. Если какой-то рабочий не работает здесь, я не хочу повторять попытку, так как я буду пинговать снова через 15 минут. Любые предложения о том, как это можно сделать в сельдерее.

@celery.task(bind=True)
def fetch_store(self):
    start = time()
    return c.chain(c.group(emap.s() for _ in range(2000)), ereduce.s(start)).apply_async()

@celery.task(rate_limit='300/m')
def fetch():
    #... requests data from external API
    return data

@celery.task
def store(numbers, start):
    end = time()
    logger.info("Received" + numbers + " " + (end - start)/1000 + "seconds")

1 ответ

Обычно я определяю пользовательскийTaskподкласс и наборmax_retriesк0(нетNone, это приведет к бесконечным повторениям):

      class NoRetryTask(Task):
    max_retries = 0
    ...

Вы также можете сделать это в одной строке в качестве декоратора, например:

      @app.task(max_retries=0)
def my_func():
    ...

Дополнительную информацию смотрите в документации .

Другие вопросы по тегам