我正在使用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