我正在使用Celery来处理多个数据挖掘任务。这些任务之一连接到远程服务,它允许最多10个同时连接每用户(或者换句话说,它CAN超过10个连接全球,但它CAN NOT超过每个人工作10个连接)。芹菜(Django)限速
我认为Token Bucket (rate limiting)是我在找,但我似乎无法找到它的任何实施。
我正在使用Celery来处理多个数据挖掘任务。这些任务之一连接到远程服务,它允许最多10个同时连接每用户(或者换句话说,它CAN超过10个连接全球,但它CAN NOT超过每个人工作10个连接)。芹菜(Django)限速
我认为Token Bucket (rate limiting)是我在找,但我似乎无法找到它的任何实施。
经过一番研究,我发现,芹菜不明确提供了一种方法来限制像这样的并发实例的数量,而且这样做通常被认为是不好的做法。
更好的解决方案是在单个任务中同时下载,并使用Redis或Memcached来存储和分发其他任务进行处理。
Celery具有速率限制功能,并且包含一个通用的令牌桶实现。
的任务设置速率限制: http://docs.celeryproject.org/en/latest/userguide/tasks.html#Task.rate_limit
或者在运行时:
http://docs.celeryproject.org/en/latest/userguide/workers.html#rate-limits
令牌桶实现在海带
虽然它可能是不好的做法,你可以使用一个专用的队列,并限制工人,如:
# ./manage.py celery worker -Q another_queue -c 10