特定のワークロードを一連のワーカーに分散して、1 つのアイテムが 1 つのワーカーだけで処理されるようにするために、特定の権限管理は必要ありません。キューイング システムが必要なだけです。
list データ型を使用して Redis の上に簡単に構築でき、LPUSH/RPUSH などのプリミティブをキューに、BRPOP/BLPOP をブロック モードでデキューします。
多数の既存の Python モジュール/サンプルの 1 つを再利用することもできます。
アップデート:
複数のワーカー ( Gearmanのようなもの) で負荷を分散するクエリ応答メカニズムが必要な場合でも、これは Redis で実装できます (おそらく最も効率的な方法ではない場合でも)。
クライアント プロセスは、起動時に UUID を生成して itelf を識別できます。次に、RPUSH/LPUSH を使用してジョブを queue:main (メイン キュー) にプッシュできます。アイテムには、ペイロード自体と、送信者の ID (UUID) が含まれている必要があります。その後、クライアントは queue:UUID (BLPOP/BRPOP) で応答を待つだけです。
パイプライン処理 (つまり、複数のクエリを送信し、複数の応答を待機する) をサポートする場合は、クライアント プロセスがクエリと応答を安全に関連付けられるように、アイテム自体を (送信者の上に) 識別する方法が必要です。
ワーカーは queue:main (BLPOP/BRPOP) からアイテムをデキューし、ペイロードを処理し、送信者の UUID を取得し、それらを queue:UUID にプッシュして結果を返します (LPUSH/RPUSH を使用)。アイテムが特定された場合は、必ずアイテムの ID を結果と共に返します。
注: キューを明示的に作成または削除する必要はありません。Redis リストは、最初のアイテムがプッシュされると自動的に作成され、最後のアイテムがポップされると削除されます。