\

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でのマルチスレッドプログラミングがより容易になります。

投稿者 admin

コメントを残す

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