芹菜(Django)限速

NFi*_*ano 9 amqp rabbitmq celery carrot

我正在使用Celery来处理多个数据挖掘任务.这些任务之一连接到远程服务,它允许最多10个同时连接每个用户(或者换句话说,它CAN超过10个连接全球,但它CAN NOT超过每个人工作10个连接).

认为 Token Bucket(速率限制)是我正在寻找的,但我似乎无法找到它的任何实现.

ask*_*sol 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中


NFi*_*ano 3

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

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