\

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の方が適している場合があります。適切なツールを選択することで、より効率的なコードを書くことができます。.

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です