\

Pythonのqueueモジュールは、スレッド間でデータをやり取りするためのFIFO(First In, First Out)データ構造を提供します。queue.Queue()を使用してキューを作成し、put()メソッドでデータを追加し、get()メソッドでデータを取り出すことができます。

しかし、マルチスレッド環境では、一つのスレッドがキューからデータを取り出すときに、そのキューが空でないことを確認する必要があります。そうでなければ、スレッドはブロックされ、プログラムは停止します。

import queue
import threading

q = queue.Queue()

def _worker():
    while True:
        msg = q.get(block=True)
        if msg is None:
            return
        print(msg)

t = threading.Thread(target=_worker)
t.start()

q.put('task-1')
q.put('task-2')
q.put('task-3')
q.put('task-4')

上記のコードでは、_worker関数がバックグラウンドスレッドで実行され、キューからメッセージを取り出して表示します。メインスレッドは、キューにタスクを追加します。

キューが空になるまでメインスレッドを待機させるには、queue.empty()メソッドを使用します。このメソッドは、キューが空の場合にTrueを返し、そうでない場合はFalseを返します。

while not q.empty():
    sleep(1)

このコードは、キューが空になるまでメインスレッドを1秒ごとにスリープさせます。

以上がPythonのqueueモジュールを使用して、スレッド間でデータをやり取りする基本的な方法です。これを応用して、より複雑なマルチスレッドプログラムを作成することができます。

投稿者 admin

コメントを残す

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