私は以下を含む少しソフトを設計しています:
インターネット上のリソースを取得し、
一部のユーザー インタラクション (リソースのクイック編集)、
一部加工。
多くのリソースでこれを行いたいと思います (それらはすべてリストに記載されています)。それぞれが他から独立しています。編集部分はかなり疲れるので、ユーザー (おそらく私) が各リソースのダウンロードを待つ必要がないように、作業を楽にしたいと考えています。簡単にするために、ここでは 3 番目のタスクを忘れます。
私の考えは、threading または multiprocessing モジュールを使用することでした。一部のスレッド (スレッド 1 など) は事前に「ダウンロード」を実行し、別のスレッド (スレッド 2 など) は既にダウンロードされたリソースでユーザーと対話します。
質問: スレッド 1 が常に少なくとも ahead_min リソースよりも先にあり、最大で ahead_max (ahead_max>ahead_min) より先にあることを確認するにはどうすればよいですか?
通常、 Queue.Queue(ahead_max) (または multiprocessing.Queue(ahead_max)) に似たものが必要になりますが、 ahead_max に達した場合、キューに最大で ahead_min 要素が残るまで挿入がブロックされることを除いて (実際には、キューが空です。 http://docs.python.org/library/queue.html#module-Queueを参照してください)。ポッピングも、少なくとも ahead_min+1 要素がキューに入るまでブロックする必要があります (一連のリソースの最後にダミー オブジェクトを挿入して、最後のリソースも処理されるようにすることができます)。
何か案が?もっと簡単な代替案があれば、共有してください。