芹菜(Django)限速

时间:2011-01-31 23:48:53

标签: rabbitmq amqp celery carrot

我正在使用Celery来处理多个数据挖掘任务。其中一项任务连接到远程服务,该服务允许最多10个同时连接每个用户(换句话说, CAN 全局超过10个连接,但不能每个工作超过10个连接。

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

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

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