PythonのQueueは、データをFIFO(First In First Out)方式で管理する便利なデータ構造です。
これは、プログラミング初心者にも非常に理解しやすい概念であり、効率的なタスク管理やプロセス間通信に役立ちます。
この記事では、Python初心者向けにQueueの基本的な使い方や応用例について詳しく解説します。
- 未経験者向けプログラミングスクール
- 現役エンジニアがしっかりサポート
- 卒業後も安心の転職・副業サポート
PythonにおけるQueueの基本

Pythonには、標準ライブラリとしてqueueモジュールがあり、これを使って簡単にQueueを操作することができます。
QueueはFIFO方式で、最初に追加された要素が最初に取り出されるという特徴があります。
基本的なQueueの操作には、要素の追加(put())、取り出し(get())、およびQueueの長さを調べることが含まれます。
Queueの作成と初期化
PythonでQueueを使うためには、まずqueue.Queue()を使ってQueueオブジェクトを作成します。
import queue
q = queue.Queue()
これにより、空のQueueが作成され、データの追加や取り出しが可能になります。
要素の追加: put()
Queueに要素を追加するには、put()メソッドを使用します。以下の例では、数字をQueueに追加しています。
q.put(1)
q.put(2)
q.put(3)
このコードは、Queueに順番に「1」「2」「3」という要素を追加します。
要素の取り出し: get()
Queueから要素を取り出すには、get()メソッドを使います。QueueはFIFO方式なので、最初に追加した要素が最初に取り出されます。
print(q.get()) # 1
print(q.get()) # 2
print(q.get()) # 3
このコードは「1」「2」「3」と順番に表示されます。
Queueの種類とその用途

PythonのQueueには、いくつかの種類があり、それぞれ異なる用途に適しています。基本のQueue以外にも、LIFO(Last In First Out)やPriority Queueなどが存在します。
使用する場面に応じて、最適なQueueの種類を選択することが重要です。
LIFO Queue
LIFO Queueは、最後に追加された要素が最初に取り出されるという方式のQueueです。これは、スタックに似た動作をします。
lifo_queue = queue.LifoQueue()
lifo_queue.put(1)
lifo_queue.put(2)
lifo_queue.put(3)
print(lifo_queue.get()) # 3
このコードでは、「3」が最初に出力されます。
Priority Queue
Priority Queueは、優先度付きで要素を取り出すQueueです。数値が小さいほど優先度が高いとみなされます。
priority_queue = queue.PriorityQueue()
priority_queue.put((2, "タスクB"))
priority_queue.put((1, "タスクA"))
priority_queue.put((3, "タスクC"))
print(priority_queue.get()) # (1, "タスクA")
この例では、最も優先度の高い「タスクA」が最初に出力されます。
Queueの最大サイズを指定する
Queueの最大サイズを指定することも可能です。Queue(maxsize)を使うことで、一定の要素数を超えないQueueを作成できます。
q = queue.Queue(maxsize=3)
この例では、Queueの最大サイズを「3」に設定しています。
Queueの応用例

PythonのQueueは、特にマルチスレッドプログラミングやプロセス間通信で活躍します。
スレッドやプロセス間でのデータのやり取りを安全かつ効率的に行うために、Queueが利用されます。
マルチスレッドでのQueueの利用
マルチスレッド環境では、複数のスレッドが同時にデータにアクセスすることがあります。
Queueを使うことで、スレッド間のデータのやり取りを簡単に管理できます。
import threading
import queue
def worker(q):
while not q.empty():
item = q.get()
print(f"処理中: {item}")
q.task_done()
q = queue.Queue()
for item in range(5):
q.put(item)
thread = threading.Thread(target=worker, args=(q,))
thread.start()
q.join()
このコードでは、スレッドがQueueの要素を取り出して処理しています。
プロセス間通信でのQueueの利用
マルチプロセッシングでも、Queueはプロセス間のデータのやり取りに役立ちます。
multiprocessing.Queue()を使うことで、プロセス間で安全にデータを共有できます。
import multiprocessing
def worker(q):
while not q.empty():
item = q.get()
print(f"処理中: {item}")
q = multiprocessing.Queue()
for item in range(5):
q.put(item)
p = multiprocessing.Process(target=worker, args=(q,))
p.start()
p.join()
この例では、プロセス間でQueueを使ってデータを処理しています。
タスク管理でのQueueの活用
Queueは、タスク管理システムのバックエンドでも使われることが多いです。
タスクをFIFO方式で処理することで、順序を保ちながら効率的にタスクを処理できます。
task_queue = queue.Queue()
tasks = ["タスク1", "タスク2", "タスク3"]
for task in tasks:
task_queue.put(task)
while not task_queue.empty():
current_task = task_queue.get()
print(f"{current_task}を処理中")
task_queue.task_done()
このコードは、タスクを順番に処理するシンプルな例です。
プログラミングスクール受講時には教育訓練給付制度を利用することで、受講料の最大80%の給付を受けることが可能です。
まとめ

PythonのQueueは、データをFIFO方式で管理するための非常に便利なツールです。
put()やget()を使って簡単にデータを操作でき、LIFO QueueやPriority Queueなどのバリエーションも活用できます。
また、マルチスレッドやプロセス間通信など、より高度なシステムでも役立つため、初心者でも是非活用してみてください。



コメント