我正在为任务排队工作流评估芹菜.我的要求有些特殊.该系统具有项目的概念,每个项目将具有与其关联的(可能很多)任务.我希望排队系统以公平的方式分派这些任务,因为一个有很多任务要处理的项目不会使其他项目饿死.
例如,假设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物料也将排在所有这些项目之后保留.