【问题标题】:Best place to retry a task in Django: requests or celery task在 Django 中重试任务的最佳位置:请求或 celery 任务
【发布时间】:2019-12-15 00:02:01
【问题描述】:

我在 celery 任务中使用 Django 中的 requests 库访问 API。具体来说,它从database 获取一些记录,准备json 并执行POST 请求。在某些情况下,调用失败并出现500 错误代码。我想再次重试POST 请求。最好的方法是什么?为什么?

【问题讨论】:

    标签: django python-3.x python-requests celery urllib3


    【解决方案1】:

    每个 Celery 作业都在单独的进程中运行。在您的情况下,重复 500-returned POST 请求与创建另一个进程无关。一个过程将并且应该足以处理此类请求。因此,您需要在同一个 Celery 作业中使用 urllib.util.retry 重试请求,然后终止作业,直到您收到代码为 200 的响应。

    【讨论】:

    • 队列中有很多元素需要发布。在芹菜中使用重试有什么缺点? @cagrias
    • 你只有一件事要做:重复一个请求,直到你得到一个成功的响应。正如我所说,创建一个单独的 celery 作业将创建另一个进程。由于从两个不同的进程发出请求不会改变请求的结果,因此您不需要创建单独的 celery 作业。
    • Celery 重试将不必要地访问您的数据库,因为它重试的次数与它重试的次数一样多——这是您真正想要避免的事情......
    猜你喜欢
    • 2011-06-19
    • 2011-07-17
    • 1970-01-01
    • 2021-09-10
    • 2011-07-17
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2012-09-06
    相关资源
    最近更新 更多