【问题标题】:Celery rate_limit affecting multiple tasksCelery rate_limit 影响多个任务
【发布时间】:2012-12-21 19:12:50
【问题描述】:

我有一个使用 rabbitmq 和 celery 的设置,工作人员在 4 台机器上运行,每台机器有 4 个实例。我定义了两个任务函数,它们基本上调用了相同的后端函数,但其​​中一个名为process_transaction,没有定义rate_limit,另一个名为slow_process_transaction,带有rate_limit="6/m"。任务进入 rabbitmq 上的不同队列,slownormal

奇怪的是对这两个任务都执行了 rate_limit。如果我尝试使用 celery.control.rate_limit 更改 rate_limit,使用 process_transaction 执行此操作不会更改有效汇率,而使用 slow_process_transaction 名称会更改两者的有效汇率。

有什么想法吗?

【问题讨论】:

    标签: python rabbitmq celery


    【解决方案1】:

    通过阅读存储桶源代码,我发现 celery 通过在完成任务后休眠时间增量来实现速率限制,因此如果您在同一个工作人员中混合具有不同速率限制的任务,它们会相互影响。

    分离工人解决了我的问题,但这不是最佳解决方案。

    您可以通过在 celeryd 调用中使用节点名称和命名参数来分隔工作人员。例如,您有节点“快”和“慢”,您希望它们分别使用并发 5 和 1 的单独队列:

    celeryd <other opts> -Q:fast fast_queue -c:fast 5 -Q:slow slow_queue -c:slow 1
    

    【讨论】:

    • 看起来我遇到了同样的问题。谢谢你的提示。如果你不介意分享的话,很高兴知道你是如何划分你的工人/队列的......
    • 这在 celery 3.1 中不起作用: $ celeryd worker -Q:fast fast_queue c:fast ("\n'celeryd' 命令已弃用,请改用'celery worker':\n\ n$ celery worker worker -Q:fast fast_queue c:fast\n\n",) 无法识别的命令行参数:worker, fast_queue, c:fast Try --help?
    • 或者,在非弃用的用法中:$ celery worker -Q:fast fast_queue c:fast 5 -Q:slow slow_queue -c:slow 1 => "用法:celery worker [options] celery : 错误: 选项 -c: 无效整数值: ':slow'"
    • 这在 2019 年仍然适用吗?
    • @PirateApp 是的。事实上,多年来我意识到这个问题更加复杂,并且以不同的费率分开工人是不可避免的。我用eventlet做高并发,创建this project做全局限速,
    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    相关资源
    最近更新 更多