【问题标题】:How to configure and run remote celery worker correctly?如何正确配置和运行远程 celery worker?
【发布时间】:2023-04-04 14:10:01
【问题描述】:

我是 celery 新手,可能做错了什么,但我已经 花了很多时间试图弄清楚如何配置 celery 正确。

所以,在我的环境中,我有 2 个远程服务器;一个是主要的(它有 公共 IP 地址和数据库服务器、rabbitmq 等大部分内容 运行我的 Web 应用程序的服务器和 Web 服务器在那里)和另一个 用于我想从中异步调用的特定任务 主服务器使用 celery。

我计划将 RabbitMQ 用作代理和结果后端。 Celery 配置非常基础:

CELERY_IMPORTS = ("main.tasks", ) 
BROKER_HOST = "Public IP of my main server" 
BROKER_PORT = 5672 
BROKER_USER = "guest" 
BROKER_PASSWORD = "guest" 
BROKER_VHOST = "/" 
CELERY_RESULT_BACKEND = "amqp" 

当我在主服务器上运行工作人员时,任务只是执行 很好,但是当我在远程服务器上运行它时,只有几个任务 被执行,然后工人被卡住无法执行任何 任务。当我重新启动工作人员时,它会执行更多任务并获取 又卡住了。任务内部没有什么特别的,我什至尝试过 仅添加 2 个数字的测试任务。我试图运行工人 不同(妖魔化而不是妖魔化,设置不同的并发和 使用 celeryd_multi),没有任何帮助。

可能是什么原因?我错过了什么?我必须跑吗 除了代理(RabbitMQ)之外的主服务器上的东西?或者是 它是芹菜中的一个错误(我尝试了几个版本:2.2.4、2.3.3 和 dev, 但他们都没有工作)?

嗯...我刚刚在本地工人身上重现了同样的问题,所以我 真的不知道是什么... 是否需要重启 celery 每执行 N 个任务后的工作人员?

任何帮助将不胜感激:)

【问题讨论】:

    标签: rabbitmq celery amqp django-celery celeryd


    【解决方案1】:

    不知道您是否最终解决了问题,但我有类似的症状。结果发现(无论出于何种原因)任务中的打印语句导致任务无法完成(可能是某种死锁情况?)。只有部分任务有打印语句,所以当这些任务最终执行时,worker的数量(由并发选项设置)全部耗尽,导致任务停止执行。

    【讨论】:

      【解决方案2】:

      尝试将您的 celery 配置设置为

      CELERYD_PREFETCH_MULTIPLIER = 1
      CELERYD_MAX_TASKS_PER_CHILD = 1
      

      docs

      【讨论】:

        猜你喜欢
        • 2015-01-15
        • 2016-09-20
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 2012-02-28
        • 1970-01-01
        • 2018-06-01
        • 1970-01-01
        相关资源
        最近更新 更多