私は最近、特定のキーを持つメッセージが常に同じワーカーにルーティングされるという概念(Celery の概念とは無関係)を含むStormを使用しています。fields grouping
group()
私が意味することのより明確な定義を得るために、これはStorm wikiからのものです.
フィールドのグループ化: ストリームは、グループ化で指定されたフィールドによって分割されます。たとえば、ストリームが「user-id」フィールドによってグループ化されている場合、同じ「user-id」を持つタプルは常に同じタスクに送られますが、異なる「user-id」を持つタプルは異なるタスクに送られる可能性があります.
たとえば、単語リストから読み取ると、a、b、c で始まる単語をワーカー プロセスのみにルーティングし、d、e、f を別のプロセスにルーティングしたいと考えています。
これが必要な理由は、プロセス間で競合状態が発生しないように、1 つのプロセスが同じデータのセットに対するデータベースの読み取り/書き込みを担当するようにしたいからかもしれません。
Celery 内でこれを達成するための最良の方法を考え出そうとしています。
これまでの私の最善の解決策は、「グループ」ごとにキューを使用し (例えば、letter.a、letters.d)、ワーカー プロセスの数がキューの数と正確に一致するようにすることです。欠点は、ワーカーが死亡したときやワーカーが追加/削除されたときなどのさまざまなシナリオとともに、ワーカーごとに 1 つのプロセスのみを実行する必要があることです。
Celery は初めてなので、参照している概念が間違っている場合は修正してください。