为什么芹菜任务没有被空闲的worker消耗?

问题描述 投票:0回答:1

我有一个带有微服务架构和管道的 Python 应用程序,我使用 Celery 以及 RabbitMQ 和 Redis。在应用程序流程(机器学习培训)中需要 8 种方法,因此称为“工人培训”的第一个工人将 8 个任务发送给另一个称为“工人培训模型”的工人。第二个有 3 个副本,以便能够更快地完成训练。一开始效果很好,每个工作人员都会使用一种方法并对其进行处理,直到完成并使用下一个方法。 然而我看到,例如此时,8 个任务中的 5 个已经完成,有 2 个工作人员(3 个副本)正在处理一个任务,但有 1 个工作人员什么也没做!它应该正在处理最后缺失的方法!知道为什么会发生这种情况吗?我认为最终,当其他两名工作人员完成目前拥有的工作人员时,它最终将由其中一名工作人员进行处理,但我需要提高效率,而不是让工作人员不做任何可能消耗任务的事情。 我的 RabbitMQ 仪表板现在看起来像这样:

(该任务是缺失的方法论,应该由自由工作者来完成......)

python rabbitmq celery
1个回答
0
投票

这很可能是由预取引起的。请阅读 预取限制 部分以及后面的部分,了解如何让工作线程保留与其拥有(空闲)工作进程一样多的任务。

简而言之(TLDR):

task_acks_late = True
worker_prefetch_multiplier = 1
© www.soinside.com 2019 - 2024. All rights reserved.