我正在使用Celery处理多个数据挖掘任务。这些任务之一连接到远程服务,该服务最多允许10个同时连接每个用户(或者说,CAN全局超过10个连接,但CANNOT超过10个连接)个人工作)。
I THINK Token Bucket (rate limiting)是我想要的,但似乎找不到任何实现。
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中
[经过大量研究,我发现Celery并未明确提供一种限制此类并发实例数量的方法,而且,这样做通常被认为是不好的做法。
更好的解决方案是在单个任务中同时下载,并使用Redis或Memcached存储和分发以供其他任务处理。
尽管这可能是不好的做法,但是您可以使用专用队列并限制工作程序,例如:
# ./manage.py celery worker -Q another_queue -c 10