Pythonのqueue
モジュールは、複数プロデューサ-複数コンシューマ (multi-producer, multi-consumer)キューを実装します。このモジュールのQueue
クラスは、必要なすべてのロックセマンティクスを実装しています。
Queueの最大数の設定
queue.Queue(maxsize=0)
はFIFOキューのコンストラクタで、maxsize
はキューに入れられる要素数の上限を設定する整数です。一度この大きさに達したら、挿入処理はキューの要素が消費されるまでブロックされます。maxsize
が0以下の場合は、キューの大きさは無限です。
しかし、queue.Queue()
はキューの長さを一定までにして、それを超える場合には古いものから取り除かせたい場合にはあまり向いていません。また、現在の要素数を得ようとしてもQueue.qsize()
というメソッドはありますが、これは長さの近似値を返すのみです。
collections.dequeを使う
最大長を設けたい場合は、collections.deque()
を使うと、すぐに今回ほしい形のキューが得られます。
import collections
q = collections.deque([], 3)
for i in range(5):
q.append(i)
print(q)
上記のコードを実行すると、最大サイズ3未満まではそのままデータが追加され、サイズが3になったら先頭の古いデータが消えて、末尾に新しいデータが追加されます(FIFO)。
まとめ
Pythonのqueue
モジュールは強力なツールですが、特定の要件(例えば、キューの最大長を設定する)に対しては、collections.deque
の方が適している場合があります。適切なツールを選択することで、より効率的なコードを書くことができます。.