3

サーバーといくつかのクライアントがあります。それらはすべて、タスクと結果の multiprocessing.Queue を共有します。ただし、クライアントがタスクを終了して結果を結果キューに入れるたびに、サーバーに結果を見て、それに基づいてタスクキューの順序を変更させたいと考えています。

これはもちろん、タスク キューからすべてをポップして再度追加することを意味します。この並べ替えプロセスの間、クライアントがタスク キューにアクセスするのをブロックする必要があります。私の質問は、タスクが結果キューに追加されたときにサーバーに認識させ、タスク キューをロックし、キューを保護しながら並べ替えることで反応させる方法です。不変条件は、クライアントが新しいタスクを取得する前に、結果が返されるたびにサーバーが再注文する必要があることです。

簡単な (しかし間違った) 方法は、 multiprocessing.Value をブール値として機能させることであり、結果が追加されるたびに、クライアントはそれを True に反転させ、結果が追加されたことを意味すると思います。サーバーはこの値を取得するためにポーリングできますが、最終的には、ポーリングの間に別のクライアントが来て別の結果を追加するのを見逃す可能性があります。

どんな考えでも大歓迎です。

** 「マルチスレッド」タグは、スレッド化と非常によく似た考え方をしているためです。ここでのプロセス/スレッドの区別はあまり重要ではないと思います。

4

1 に答える 1