【问题标题】:Why are my celery worker processes processing everything in serial?为什么我的芹菜工人进程串行处理所有内容?
【发布时间】:2014-11-24 15:17:43
【问题描述】:

我在 AWS c3.xlarge(4 核机器)上运行多个 celery 工作进程。有一个“批处理”工作进程,其 --concurrency 参数设置为 2,一个“优先级”进程,其--concurrency 参数设置为 1。两个工作进程都从同一个优先级队列中抽取。我使用 Mongo 作为我的经纪人。当我将多个作业提交到优先级队列时,即使有多个工作人员可用,它们也会一个接一个地连续处理。所有项目都由“优先”流程处理,但如果我停止“优先”流程,“批处理”流程将处理所有内容(仍然是串行的)。哪些配置不正确会阻止 celery 异步处理作业?

编辑:事实证明,同步瓶颈在于提交作业的服务器而不是 celery。

【问题讨论】:

  • 你的意思是任务没有公平地分派给工人?
  • 是的。然而,不仅仅是一些工人比其他工人获得更多的任务。所有任务都交给一个工作进程,即使它很忙并且其他工作人员可以处理它们。我注意到我在这台机器上的内存非常低,所以我目前正在调查这是否是问题所在。

标签: celery task-queue


【解决方案1】:

默认情况下,worker会预取4 * concurrency number任务来执行,这意味着你的第一个运行的worker会预取4个任务,所以如果你排队4个或更少的任务,它们将全部由这个worker单独处理,并且赢了'不是队列中要被第二个工作人员使用的任何其他消息。

您应该将CELERYD_PREFETCH_MULTIPLIER 设置为最适合您的数字,我之前遇到过这个问题并将此选项设置为 1,现在我所有的任务都被工人相当地消耗了。

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 1970-01-01
    • 2022-10-25
    • 2023-01-26
    • 2015-06-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多