【发布时间】:2022-01-03 15:04:57
【问题描述】:
我正在使用 Celery 并行执行调用第三方 API 的 Python 函数。
此 API 要求在每次调用之间至少等待 3 秒。
有没有办法指定消息代理(RabbitMQ 或 Redis)来尊重每个工作人员调用之间的延迟?
【问题讨论】:
标签: python redis rabbitmq celery celery-task
我正在使用 Celery 并行执行调用第三方 API 的 Python 函数。
此 API 要求在每次调用之间至少等待 3 秒。
有没有办法指定消息代理(RabbitMQ 或 Redis)来尊重每个工作人员调用之间的延迟?
【问题讨论】:
标签: python redis rabbitmq celery celery-task
在 Celery 中,您可以使用倒计时方法。见https://docs.celeryproject.org/en/stable/userguide/calling.html#eta-and-countdown
RabbitMQ 有几个不同的选项来支持延迟消息,包括延迟消息交换插件和死信。不幸的是,Celery 不支持这两种方法。相反,它会延迟消息的执行,直到达到倒计时时间。消息本身会立即发送给工作人员。
【讨论】:
会查看https://docs.celeryproject.org/en/stable/userguide/tasks.html#retrying
将重试延迟指定为 3 秒,您可以将重试次数限制设置为 X 作为任务定义的一部分,如文档中所示。
【讨论】: