Django は、1 回のスクリプト実行でチェーンを介して複数のCeleryタスクを生成します (fe if / がブラウザーで開かれている場合、1000 個のタスクが遅延メソッドによって呼び出されます)。
以前のスクリプト実行でキューに入れられたタスクがまだ実行されている場合、新しいタスクの生成を制限するものが必要です。
次の設定により、同時に実行される 1 つのタイプのタスクの数を制限できます。
rate_limit = “1000/m”
=> このタイプのタスクは 1 分間に 1000 個しか実行できません。( http://docs.celeryproject.org/en/latest/userguide/tasks.html#list-of-optionsを参照)
これには、セロリがネイティブに提供していない分散ロックが必要です。
redis.Lock
この種のロックについては、ほとんどの場合に役立つことがわかりました。セマフォが必要な場合は、redis のアトミックな incr/decr 関数をある種のウォッチドッグ メカニズムと共に使用して、プロセスがまだ実行されていることを確認できます。