Celery 中工人之间的任务智能分配

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

经过一周的尝试和搜索,我没有得到任何结果,非常感谢您的帮助。

总结:
我有 10 个工人,每个工人里面都有一个 app.task。
每天,这10名工人要完成近5万项任务。
问题是如何在这 10 个工人之间智能地分配任务。

更多详情:
我当前的代码将 50,000 个任务除以 10,然后为每个工作人员分配 5,000 个任务。我为什么分享?因为我必须在工作开始时 apply_async 任务。 (所以每个worker都有一个单独的队列)
工作人员执行任务没有任何问题,但当一些工作人员执行任务速度更快但最终没有任务,而一些工作人员可能执行任务的时间更长时,就会出现挑战。


我在寻找什么?
我们正在寻找一种方法,将所有 50,000 个任务放在一个队列中,而不需要分割它们,并自动从这 50,000 个队列中删除这 10 个工作任务并执行它们,在这种情况下,其他工作人员将几乎一起完成他们的任务。


请指导我该怎么做? 如果有些事情很愚蠢,请发表评论,以便我可以解释更多。
python rabbitmq celery distributed-computing
1个回答
0
投票

如果我理解正确的话,你希望你的工人一有空就接任务,并且所有工人都有相同的任务。使用单个队列,所有工作人员都在监听它应该可以工作,这就是它的默认使用方式。如果您有长时间运行的任务,您可能需要在 celery

configuration
中设置 worker_prefetch_multiplier=1。我不明白是什么让你从 10 个不同的队列开始,而不是为所有工作人员使用一个队列。

© www.soinside.com 2019 - 2024. All rights reserved.