【问题标题】:How to make Celery waiting for a specific delay before executing a new task如何让 Celery 在执行新任务之前等待特定的延迟
【发布时间】:2022-01-03 15:04:57
【问题描述】:

我正在使用 Celery 并行执行调用第三方 API 的 Python 函数。

此 API 要求在每次调用之间至少等待 3 秒。

有没有办法指定消息代理(RabbitMQ 或 Redis)来尊重每个工作人员调用之间的延迟?

【问题讨论】:

    标签: python redis rabbitmq celery celery-task


    【解决方案1】:

    在 Celery 中,您可以使用倒计时方法。见https://docs.celeryproject.org/en/stable/userguide/calling.html#eta-and-countdown

    RabbitMQ 有几个不同的选项来支持延迟消息,包括延迟消息交换插件和死信。不幸的是,Celery 不支持这两种方法。相反,它会延迟消息的执行,直到达到倒计时时间。消息本身会立即发送给工作人员。

    【讨论】:

    • 感谢您的回复。不幸的是,我担心所提出的解决方案都不能提供我正在寻找的东西。我希望我的整个工作人员池尊重每个任务执行开始之间 3 秒的延迟。倒计时或延迟消息延迟将特定任务发送到任务队列中。就我而言,由于任务平均需要大约 16 秒,因此倒计时没有任何帮助。即使有 3 秒倒计时,任务也会堆叠在任务队列中。死信是关于在失败的情况下重试发布消息。
    【解决方案2】:

    会查看https://docs.celeryproject.org/en/stable/userguide/tasks.html#retrying

    将重试延迟指定为 3 秒,您可以将重试次数限制设置为 X 作为任务定义的一部分,如文档中所示。

    【讨论】:

    • 感谢您的回复,但这不是我想要的:我希望我的整个工作人员池尊重每个任务开始执行之间 3 秒的延迟
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多