Pythonでは、キューとして
collections.deque(以下、 deque)と queue.Queue (以下、 Queue) がある。
両者の違い
deque
deque は Double- Ended Queueの略称で、
名前通り、 両サイドからデータを入れたり取り出したりすることができるちょっと特殊なキューです。
図で表現しますと、
上図は pythontic.comさんから借りてきた
- 英語の表現がわかりやすいです
A deque is a double-ended queue on which elements can be added or removed from either side - that is on left end or right end, head or tail.
Queue
こちらは一般に認識されている FIFOキュー となります。
上図にあるように、片サイドからデータを入れたり、もう片サイドからデータを取り出したりすることになります。
queue.Queue と同じクラスに LifoQueue と PriorityQueueも定義されいています。
queue.LifoQueue(maxsize=0)
LifoQueue は名前通り、queueのLIFO版です。
データ構造的には stackですね。
queue.PriorityQueue(maxsize=0)
queue.PriorityQueue は優先度付きキューです。
また今度説明します。
使い分け
-
マルチスレッド(複数プロデューサ-複数コンシューマ(multi-producer, multi-consumer))とかの場合は、スレッドセーフ設計(マルチスレッド対応)の
queue.Queueを使用する。 -
シングルスレッドの場合は
collections.dequeを使用。理由は、スレッドセーフ設計のqueue.Queueより早いため。


