Pythonのqueueモジュールは、データの挿入や取り出しを、指定する順番で可能にするライブラリです。
queueモジュールには、取り出す順番の異なる3種類のクラスがまとめられています。
queueモジュールはPythonの標準ライブラリに含まれているので、installは不要です。
ただし、Python2系とPython3系では、ソースコードでの表記が下記のように異なるので注意しましょう。
- Python2系=大文字の「Queue」
- Python3系=小文字の「queue」
FIFOキュー(先入れ先出し)
FIFOキューは「First In First Out」の略で、キューとも呼ばれます。「先入れ先出し」の構造で、最初に入れたデータを最初に取り出す方法です。
【書式】
つまり、入れた順番通りの順番で、データを取り出します。
わかりやすくいうと、スーパーのレジやラーメン屋の行列のように、入ってその順番で出て行くイメージです。
【コード例】
# 必要なライブラリのインポート from queue import Queue # FIFOキューの作成 queue = Queue() # キューにデータを挿入する。挿入するデータは「0,1,2,3,4」 for i in range(5): queue.put(i) # キューからデータがなくなるまで取り出しを行う while not queue.empty(): print(queue.get())
【出力結果】
1
2
3
4
put()で、キューに要素が追加されます。
get()で、最初の要素から抽出されます。
LIFOキュー(後入れ先出し)
LIFOキューは後入れ先出しの構造で、最後に入れたデータから順番に取り出していく方法です。
LIFOは「Last In First Out」の略で、スタックとも呼ばれます。
【書式】
入れた順番とは逆の順番で、データを取り出します。
わかりやすくいうと、満員電車やエレベーターの乗降がスタックにあたります。
【コード例】
# 必要なライブラリのインポート from queue import LifoQueue # LIFOキューの作成 queue = LifoQueue() # キューにデータを挿入する。挿入するデータは「0,1,2,3,4」 for i in range(5): queue.put(i) # キューからデータがなくなるまで取り出しを行う while not queue.empty(): print(queue.get())
【出力結果】
3
2
1
0
put()で、キューに要素が追加されます。
get()で、最新の要素から抽出されます。
優先順位付きキュー「PriorityQueue」
PriorityQueueはデータの要素の値に基づいて取り出す順番を決める方法です。
要素の値で並べ替えることをソートといい、低い値の要素から取り出されます。
【書式】
pythonには、heapqとqueue.PriorityQueueという、2種類の優先度付きキューがあります。
マルチスレッドの場合は、ここで紹介するqueue.PriorityQueueを使用します。
【コード例】
# 必要なライブラリのインポート from queue import PriorityQueue # 優先順位付きキューの作成 queue = PriorityQueue() # キューにデータを挿入する。挿入するデータは「7,1,5」の順 queue.put(7) queue.put(1) queue.put(5) # キューからデータがなくなるまで取り出しを行う while not queue.empty(): print(queue.get())
【出力結果】
5
7
FIFOキューの順番なら、出力される順番は「715」
LIFOキューの順番なら、出力される順番は「517」
になるはずですが、値の小さい要素から取り出されるので「157」となります。
queueモジュールで挿入や抽出を行うメソッド
queueモジュールでは、データの挿入や取り出しを実行するために以下のメソッドを用います。
上に出てきたコードの中でも実際に出てきたものを説明していきます。
キューへの挿入は「put」
【書式】
キューからの取り出しは「get」
【書式】
キューが空かチェックする「empty」
【書式】
キューが満杯かチェックする「full」
【書式】
コメント