rabbitmq 为什么celery 任务不被一个自由的工人消费?

ddrv8njm  于 12个月前  发布在  RabbitMQ
关注(0)|答案(1)|浏览(124)

我有一个Python应用程序,它具有微服务架构和管道,我使用Celery沿着RabbitMQ和Redis。(机器学习训练)需要8种方法,因此第一个名为“工人训练”的工人将8个任务发送给另一个名为“工人训练模型”的工人。第二个工人有3个副本,以便能够更快地完成训练。起初它工作得很好,每个工作者消耗一个方法并处理它,直到完成并消耗下一个方法。然而,我看到,例如,此时此刻,8个任务中的5个已经完成,有2个工作者(在3个副本中)正在处理一个任务,但有一个工作线程什么也没做!它应该正在处理最后一个缺失的方法!知道为什么会发生这种情况吗?我认为最终它将在其他2个工作者中的一个完成时被处理,但是我需要更高效,而不是让工作者什么都不做,这会消耗任务。我的RabbitMQ Jmeter 板现在看起来像这样:
x1c 0d1x的数据
(That任务是缺少的方法,应该由自由工人完成...)

hwamh0ep

hwamh0ep1#

这很可能是由预取引起的。阅读预取限制一节,以及后面的一节,了解如何使工作进程保留与其(空闲)工作进程一样多的任务。
简而言之(TLDR):

task_acks_late = True
worker_prefetch_multiplier = 1

字符串

相关问题