【问题标题】:Celery with RabbitMQ creating too many queues带有 RabbitMQ 的 Celery 创建了太多队列
【发布时间】:2018-08-22 15:41:54
【问题描述】:

在生产服务器上运行 Django/Celery/RabbitMQ 时,一些任务被正确发送和消费。但是,RabbitMQ 在处理完成后开始耗尽所有 CPU。我相信这与下面的报道有关。

RabbitMQ on EC2 Consuming Tons of CPU

在该线程中,建议设置这些配置值:

  • CELERY_IGNORE_RESULT
  • CELERY_AMQP_TASK_RESULT_EXPIRES

我在调用 appl_async() 时分叉并自定义了 celery-haystack 包以设置这两个值,但它似乎没有任何效果。

我认为 Celery 正在自动创建大量(每个任务一个)以 uid 命名的队列来存储结果。但我似乎无法阻止它。

有什么想法吗?

【问题讨论】:

    标签: rabbitmq celery django-haystack


    【解决方案1】:

    我自己花了一天时间研究这个问题。我认为你的意思的两个选项可以这样解释:

    • CELERY_IGNORE_RESULT: 如果True 则任务的结果将被忽略,因此它们不会返回任何你用delayapply_async 调用它们的地方。
    • CELERY_AMQP_TASK_RESULT_EXPIRES:存储在结果后端的结果的过期时间。您可以将此选项设置为合理的值,以便 RabbitMQ 可以删除过期的结果。

    生成的许多队列仅用于存储结果。因此,如果您不想存储任何结果,可以从配置文件中删除 CELERY_RESULT_BACKEND 选项。

    祝你有美好的一天!

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-01-26
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多