Python 如何在芹菜中将任务从一个队列移动到另一个队列

Python 如何在芹菜中将任务从一个队列移动到另一个队列,python,redis,rabbitmq,celery,Python,Redis,Rabbitmq,Celery,我需要能够做两件事,这两件事都取决于我是否能够将任务从一个队列移动到另一个队列: 当任务失败一定次数的重试时,将其移动到另一个队列 当任务满足某些条件时,将其移动到不同的队列(由不同的工作人员处理) 请注意,我的意思是从worker中的一个任务将内容放入另一个队列,而不是从主应用程序 这里引用了我能找到的唯一一段代码- 有人能指出正确的api来执行此操作吗?移动任务的想法实际上归结为使用相同的参数运行相同的任务,但将其发送到不同的队列 具有队列参数 from celery.exceptions

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

  • 当任务失败一定次数的重试时,将其移动到另一个队列
  • 当任务满足某些条件时,将其移动到不同的队列(由不同的工作人员处理)
  • 请注意,我的意思是从worker中的一个任务将内容放入另一个队列,而不是从主应用程序

    这里引用了我能找到的唯一一段代码- 有人能指出正确的api来执行此操作吗?

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

    具有
    队列
    参数

    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,则可以使用。例如,要在本地代理上将消息从队列
    q1
    移动到队列
    q2

    rabbitmqctl set_parameter shovel my-shovel \
    '{"src-uri": "amqp://", "src-queue": "q1", \
     "dest-uri": "amqp://", "dest-queue": "q2"}'
    
    对于上面的案例“2”,您打算何时/如何检测“任务满足某些条件”?它是从正在运行的任务内部发出的吗?在相关任务运行之前,它是否来自另一个任务?你能澄清或举例说明你想在你的案例“2”中得到什么吗?