[英]How do I move tasks from one queue to another in celery
我需要能够做两件事,这两件事都取决于我能否将任务从一个队列移动到另一个队列:
请注意,我的意思是将工作人员的一项任务中的内容放入另一个队列中 - 而不是来自主应用程序。
我能找到的唯一一段代码在这里被引用 - 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 插件。 例如,将消息从队列q1
移动到本地代理上的队列q2
:
rabbitmqctl set_parameter shovel my-shovel \
'{"src-uri": "amqp://", "src-queue": "q1", \
"dest-uri": "amqp://", "dest-queue": "q2"}'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.