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

发布于 2024-12-21 04:57:02 字数 456 浏览 0 评论 0原文

我使用 Celery 和 Django 来管理任务队列,并使用一个(或多个)小型(单核)EC2 实例来处理该任务。

我有一些考虑。

  • 我的任务在单个核心上占用 100% 的 CPU。 - 使用任何可用的 CPU,但仅在一个核心中
  • 如果有 2 个任务在同一核心上进行,则每个任务的速度将减半。
  • 我想尽快开始每项任务,而不是让它被搁置。

现在假设我有 4 个 EC2 实例,我用 "-c 5" 启动 celery 。即每个实例 5 个并发任务。

在此设置中,如果我有 4 个新任务,我想确保每个任务都进入不同的实例,而不是 4 个进入同一实例并且每个任务争夺 CPU。

同样,如果我有 8 个任务,我希望每个实例一次获取 2 个任务,而不是 2 个实例分别处理 4 个任务。

芹菜已经像我描述的那样了吗?如果不是那么我怎样才能让它表现得像这样呢?

I am using Celery with Django to manage a task que and using one (or more) small(single core) EC2 instances to process the task.

I have some considerations.

  • My task eats 100% CPU on a single core. - uses whatever CPU available but only in one core
  • If 2 tasks are in progress on the same core, each task will be slowed down by half.
  • I would like to start each task ASAP and not let it be que.

Now say I have 4 EC2 instances, i start celery with "-c 5" . i.e. 5 concurrent tasks per instance.

In this setup, if I have 4 new tasks, id like to ensure, each of them goes to different instance, rather than 4 going to same instance and each task fighting for CPU.

Similarly, if I have 8 tasks, id like each instance to get 2 tasks at a time, rather than 2 instances processing 4 tasks each.

Does celery already behave the way I described? If not then how can i make it behave as such?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伴我心暖 2024-12-28 04:57:02

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

现在,任务不会干扰并在实例之间很好地分配。

(上面假设你的任务是CPU密集型的)

it's actually easy: you start one celery-instance per ec2-instance. set concurrency to the number of cores per ec2-instance.

now the tasks don't interfere and distribute nicely among you instances.

(the above assumes that your tasks are cpu bound)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文