9

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

认为 令牌桶(速率限制)是我正在寻找的,但我似乎找不到它的任何实现。

4

3 回答 3

11

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

于 2011-02-01T14:56:50.653 回答
3

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

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

于 2011-02-01T15:54:58.083 回答
3

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

    # ./manage.py celery worker -Q another_queue -c 10
于 2012-12-10T12:15:29.737 回答