如何在芹菜中禁用重试?

问题描述 投票:0回答:1

我每 15 分钟运行一次 celerybeat 调度程序,我需要从 API 获取数据(速率限制 = 300 个请求/分钟最大值)并将结果存储到数据库中。我想同时获取受速率限制的并行 url。如果这里有任何工人失败,我不想重试,因为我会在 15 分钟后再次 ping。有关如何在 celery 中完成此操作的任何建议。

@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")
python-3.x celery celerybeat
1个回答
0
投票

我通常定义一个自定义

Task
子类并将
max_retries
设置为
0
(不是
None
,这使得它永远重试):

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

你也可以像这样作为装饰器在一行中完成它:

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

有关更多信息,请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.