python-使用Celery在多个队列中公平分配任务

我正在为任务排队工作流评估芹菜.我的要求有些特殊.该系统具有项目的概念,每个项目将具有与其关联的(可能很多)任务.我希望排队系统以公平的方式分派这些任务,因为一个有很多任务要处理的项目不会使其他项目饿死.

例如,假设ProjectA有100个与之关联的任务,并且所有这些任务都同时提交.前5项任务被取消并提交给5名工人.在处理前5个任务时,将与另外100个任务一起提交ProjectB. ProjectB不必等待ProjectA完成其所有100个任务即可获得一些处理时间.相反,一旦工作者有空,便应处理ProjectB任务.然后,下一个有空的工作人员应以循环方式处理ProjectA任务,依此类推.

我的想法是,我可以为每个项目动态创建新队列,并让所有工作人员从所有队列中撤出,如this SO post中所述.但是,根据this answer,芹菜工人实际上将按照提交的顺序处理任务,无论将他们排在队列中(我也觉得有点奇怪).这对我不起作用,因为这会导致当前正在处理的项目提交之后的项目饿死.

芹菜可以用来满足我的要求吗?如果没有,是否存在建议的最佳实践来实现我的要求?

解决方法:

根据我的测试,芹菜可以用来满足您的要求,因为队列以循环方式进行处理.在other SO post you referenced中查看我的答案.

根据需要对ProjectB任务进行响应的速度,您可能需要调整PREFETCH_MULTIPLIER的值.我相信默认值为4,据我了解,这意味着您的芹菜工作者从队列中以4个批次提取物品(更多信息,请参阅this SO post).因此,如果您有很多工作人员,即使尚未处理ProjectA队列中的许多项目,即使它们尚未被处理,您的ProjectB物料也将排在所有这些项目之后保留.

上一篇:芹菜节拍有时会停止工作


下一篇:python-如何让Celery从命令行加载配置?