Celery を使用して、複数のデータ マイニング タスクを処理しています。これらのタスクの 1 つは、ユーザーごとに最大 10 の同時接続を許可するリモート サービスに接続します(つまり、グローバルに 10 接続を超えることはできますが、個々のジョブごとに 10 接続を超えることはできません)。
Token Bucket (レート制限)を探していると思いますが、その実装が見つからないようです。
Celery を使用して、複数のデータ マイニング タスクを処理しています。これらのタスクの 1 つは、ユーザーごとに最大 10 の同時接続を許可するリモート サービスに接続します(つまり、グローバルに 10 接続を超えることはできますが、個々のジョブごとに 10 接続を超えることはできません)。
Token Bucket (レート制限)を探していると思いますが、その実装が見つからないようです。
Celeryはレート制限を備えており、一般的なトークンバケットの実装が含まれています。
タスクのレート制限を設定します:http: //docs.celeryproject.org/en/latest/userguide/tasks.html#Task.rate_limit
または実行時:
http://docs.celeryproject.org/en/latest/userguide/workers.html#rate-limits
トークンバケットの実装は昆布にあります
多くの調査の結果、Celery はこのような同時インスタンスの数を制限する方法を明示的に提供していないことがわかりました。さらに、そうすることは一般的に悪い習慣と見なされます。
より良い解決策は、1 つのタスク内で同時にダウンロードし、Redis または Memcached を使用して保存し、他のタスクを処理するために配布することです。
悪い習慣かもしれませんが、次のように専用キューを使用してワーカーを制限できます。
# ./manage.py celery worker -Q another_queue -c 10