2017-09-13 140 views
7

我们将芹菜用于异步后台任务,我们有2个队列用于不同的优先级任务。我们有2个节点集群单独服务它们。事情如预期般运作良好。在芹菜中的多个队列中优先队列?

问:

我们得到多为低优先级任务。为了优化资源利用率,我想知道是否有办法配置worker(侦听高优先级队列)来侦听这两个队列。但只要有一份工作在那里,就从更高优先级的队列中选择工作?否则返回低优先级队列。

我已经通过讨论@Celery Task Priority讨论了基于优先级的任务调度。

但我的问题是优先队列,而不仅仅是队列中的任务。

回答

1

您可以通过在启动时为工作人员定义多个队列来部分实现此目的。

您可以使用以下命令:另请参阅here了解更多详情。

celery -A proj worker -l info -Q Q1,Q2 

虽然这种方法存在问题。它不会采用回退式方法来实现。 因为,监听多个队列的工作人员均匀分配资源。

因此,即使在“正常优先级队列”中存在某些内容时,您仅需从“高优先级队列”处理的要求也无法实现。 这可以通过为'高优先级队列'分配更多的工人(可能为75%)和25%'普通优先级队列'来最小化。或基于你的工作负载的不同份额。

0

不幸的是,开箱即用芹菜是不可能的。

最佳解决方案是启动2名工人。 1用于低优先级,其他用于n进程的高优先级。

当没有高优先级任务时,具有低优先级任务的工作人员将使用所有资源,反之亦然。如果有两项任务,则资源将均匀分配。

+0

它可以是一个解决方案。我会尝试 。 –