【问题标题】:Celery (Django) Rate limiting芹菜(Django)速率限制
【发布时间】:2011-06-18 22:51:14
【问题描述】:

我正在使用 Celery 处理多个数据挖掘任务。其中一项任务连接到远程服务,该服务每个用户最多允许同时连接 10 个(或者换句话说,它可以在全球范围内超过 10 个连接,但它每个单独的作业不能超过 10 个连接)。

THINK Token Bucket (rate limiting) 是我正在寻找的,但我似乎找不到它的任何实现。

【问题讨论】:

    标签: rabbitmq amqp celery carrot


    【解决方案1】:

    Celery 具有速率限制功能,并包含通用令牌桶实现。

    为任务设置速率限制: http://docs.celeryproject.org/en/latest/userguide/tasks.html#Task.rate_limit

    或者在运行时:

    http://docs.celeryproject.org/en/latest/userguide/workers.html#rate-limits

    令牌桶实现在 Kombu 中

    【讨论】:

    【解决方案2】:

    虽然这可能是不好的做法,但您可以使用专用队列并限制工作人员,例如:

        # ./manage.py celery worker -Q another_queue -c 10
    

    【讨论】:

    • 我不认为这是不好的做法。这是一个具有不同用法和消费模式的队列,所以......对我来说,如果它是一个不同的队列是有意义的。
    【解决方案3】:

    经过大量研究,我发现 Celery 并没有明确提供一种方法来限制这样的并发实例数量,而且,这样做通常被认为是不好的做法。

    更好的解决方案是在单个任务中同时下载,并使用 Redis 或 Memcached 存储和分发以供其他任务处理。

    【讨论】:

      猜你喜欢
      • 2015-03-29
      • 1970-01-01
      • 2017-06-29
      • 2015-03-27
      • 2012-05-01
      • 1970-01-01
      • 2020-08-02
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多