Pythonのqueue
モジュールは、スレッド間のデータのやり取りを管理するためのデータ構造を提供します。このモジュールには、FIFO(First In, First Out)キュー、LIFO(Last In, First Out)キュー、優先度付きキューなど、さまざまな種類のキューが含まれています。
Queueモジュールの基本
Queueモジュールを使用するためには、まずそれをインポートする必要があります。
import queue
次に、Queueクラスをインスタンス化して新たなキューを作成します。
q = queue.Queue()
この時点で q
は空のFIFOキューとなり、これ以降で追加した要素を保存できます。
要素の追加と取り出し
Queueクラスのインスタンスに対して、put
メソッドを使うことで新たな要素をキューの末尾に追加できます。
q.put("apple")
キューから要素を取り出すには、get
メソッドを使います。get
メソッドはキューから最初の要素(FIFOキューの場合は最も古い要素)を削除し、その要素を返します。
item = q.get()
Queueとマルチスレッド
PythonのQueueモジュールは、マルチスレッドプログラミングにおいて非常に有用です。マルチスレッドでキューを使う利点は、複数のスレッド間でデータを安全に交換できることです。
以下に、マルチスレッドでのキューの利用例を示します。
from threading import Thread
from queue import Queue
def worker(q):
while True:
item = q.get()
if item is None:
break
# process item
print(f"Working on {item}")
# signal that the task is done
q.task_done()
q = Queue()
num_worker_threads = 5
threads = []
for i in range(num_worker_threads):
t = Thread(target=worker, args=(q,))
t.start()
threads.append(t)
# feed the queue
for item in source_items:
q.put(item)
# block until all tasks are done
q.join()
# stop workers
for i in range(num_worker_threads):
q.put(None)
for t in threads:
t.join()
このコードでは、複数のワーカースレッドがキューからアイテムを取り出し、それぞれのアイテムを処理します。全てのアイテムが処理されたら、ワーカースレッドは終了します。
以上がPythonのQueueモジュールの基本的な使い方とその活用例です。このモジュールを理解し活用することで、Pythonでのマルチスレッドプログラミングがより容易になります。