如何使用Celery在节点之间均匀分配任务?

时间:2011-12-12 18:52:00

标签: python django celery django-celery

我正在使用带有Django的Celery来管理任务队列并使用一个(或多个)小型(单核)EC2实例来处理任务。

我有一些考虑因素。

  • 我的任务在一个核心上占用100%的CPU。 - 使用任何可用的CPU,但只使用一个核心
  • 如果同一核心上正在进行2项任务,则每项任务将减慢一半。
  • 我想尽快开始每项任务,不要让它变成阙。

现在说我有4个EC2实例,我用“-c 5”开始芹菜。即每个实例5个并发任务。

在这个设置中,如果我有4个新任务,id就像要确保,每个任务都进入不同的实例,而不是4个去同一个实例,每个任务都在争夺CPU。

同样,如果我有8个任务,id就像每个实例一次获得2个任务,而不是2个实例每个处理4个任务。

芹菜的行为是否与我描述的方式相同?如果没有,那我怎么能让它表现得这样呢?

1 个答案:

答案 0 :(得分:2)

实际上很简单:每个ec2-instance启动一个celery-instance。将并发设置为每个ec2-instance的核心数。

现在这些任务不会干扰并在你的实例中很好地分配。

(以上假设你的任务是cpu绑定的)