Python 停止芹菜工人处理任务或监控';未消费';百花齐放的任务

Python 停止芹菜工人处理任务或监控';未消费';百花齐放的任务,python,celery,flower,Python,Celery,Flower,假设芹菜队列上的所有任务都遇到了第三方API。然而,API有一个费率限制,我正在跟踪(有一个我需要遵守的日限制和小时限制)。当我达到速率限制时,我想暂停新任务的消耗,然后在我知道自己很好时再继续 我通过以下两项任务实现了这一点: @celery.task() def cancel_api_queue(minutes_to_resume): resume_api_queue.apply_async(countdown=minutes_to_resume*60, queue='celery'

假设芹菜队列上的所有任务都遇到了第三方API。然而,API有一个费率限制,我正在跟踪(有一个我需要遵守的日限制和小时限制)。当我达到速率限制时,我想暂停新任务的消耗,然后在我知道自己很好时再继续

我通过以下两项任务实现了这一点:

@celery.task()
def cancel_api_queue(minutes_to_resume):
    resume_api_queue.apply_async(countdown=minutes_to_resume*60, queue='celery')
    celery.control.cancel_consumer('third_party', reply=True)

@celery.task(default_retry_delay=300, max_retries=5)
def resume_api_queue():
    celery.control.add_consumer('third_party', destination=['y@local'])
然后我可以继续提交我的第三方API任务,一旦我的消费者被添加回来,我的所有任务都会被消耗掉。太好了

但是,由于此队列中没有消费者,因此似乎意味着我无法再看到正在提交的作业(直到添加消费者)

我做错什么了吗?我能否以另一种方式实现此“暂停”,以继续查看提交的工作?

p、 这可能与这个问题有关,但不是100%确定:

我正在使用amqp代理,如果这有区别的话


感谢孩子们。

我怀疑在工作人员拿起队列消息之前偷看它们的内容并不是Flower设计的一部分。因此,如果您停止使用队列中的任务,那么Flower所能做的最好的事情就是在“Broker”窗格中显示有多少任务已作为单个数字排队

观察传入任务内部的一种黑客方法是添加一个中间的虚拟“转发”任务,它只是将消息从一个队列(我们称之为
query\u inbox
)转发到另一个队列(例如,
query\u processing

例如,类似于:

@celery.task(queue='query_inbox')
def query(params):
    process_query.delay(params)

@celery.task(queue='query_processing')
def process_query(params):
    ... do rate-limited stuff ...

现在,您可以停止使用
query\u processing
中的任务,但您仍然可以在任务通过
query\u收件箱时观察它们的参数。

谢谢@KT。-所以我们确实想到了额外的排队技巧——很高兴看到我们并没有完全愚蠢——但看起来很可怕目前,我只是接受这样一个事实:当消费者停车时,我不知道提交的确切作业是什么。事实上,我们同意可以在“经纪人”一栏中看到这些工作。似乎取消消费者不是最好的主意,但我想现在就可以了。我不认为有各种中间队列一定是愚蠢或可怕的。事实上,据我在著名的Fowler的书中模模糊糊地记得,“企业架构”是关于以奇特的方式将消息从一个队列路由到另一个队列的:)