Celery(Django)速率限制

问题描述 投票:9回答:3

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

I THINK Token Bucket (rate limiting)是我想要的,但似乎找不到任何实现。

rabbitmq amqp celery carrot
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中


3
投票

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

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


3
投票

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

    # ./manage.py celery worker -Q another_queue -c 10
© www.soinside.com 2019 - 2024. All rights reserved.