gpt4 book ai didi

python - 如何在 celery 中将任务从一个队列移动到另一个队列

转载 作者:IT王子 更新时间:2023-10-29 06:05:13 26 4
gpt4 key购买 nike

我需要能够做两件事,这两件事都取决于我能够将任务从一个队列移动到另一个队列。

  1. 当任务重试一定次数失败时,将其移至另一个队列
  2. 当任务满足一定条件时,将其移至不同的队列(由不同的worker处理)

请注意,我的意思是将工作人员的一项任务中的内容放入另一个队列中 - 而不是来自主应用程序。

这里引用了我能找到的唯一一段代码 - https://stackoverflow.com/a/27144119/112050有人可以指出正确的 api 来执行此操作吗?

最佳答案

移动任务的想法实际上归结为使用相同的参数运行相同的任务,但将其发送到不同的队列。

apply_async有一个 queue 参数

from celery.exceptions import MaxRetriesExceededError

@shared_task(default_retry_delay = 1 * 60, max_retries = 10)
def some_task(arg1, arg2):
try:
# task logic

if some_condition:
some_task.apply_async([arg1, arg2], queue='different_queue')
return

except MaxRetriesExceededError:
some_task.apply_async([arg1, arg2], queue='different_queue')

except Exception, exc:
raise some_task.retry(exc=exc)

如果你真的想在队列之间移动任务,假设你正在使用 RabbitMQ,你可以使用 Shovel Plugin .例如,将消息从队列 q1 移动到本地代理上的队列 q2:

rabbitmqctl set_parameter shovel my-shovel \
'{"src-uri": "amqp://", "src-queue": "q1", \
"dest-uri": "amqp://", "dest-queue": "q2"}'

关于python - 如何在 celery 中将任务从一个队列移动到另一个队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42115319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com