Pythonのqueue.Queue
はマルチスレッドで安全にデータを取り扱う仕組みの1つとして同期キューが備わっています。この記事では、その中でもtask_done
メソッドの使い方について詳しく解説します。
queue.Queueとは
queue.Queue
は、マルチスレッドプログラミングで同期的に利用できるキューのことを言います。キュー(Queue)とはデータ構造の一種で、FIFO (First In, First Out)という特徴を持つデータ構造です。
task_doneメソッドとは
Queue.task_done()
は、キューからアイテムをget()
で取り出し、その後にtask_done()
を呼び出すことで、そのアイテムを使ったタスクが完了したことをキューに教えます。
task_doneメソッドの使い方
以下に、task_done
メソッドの使用例を示します。
import queue
import threading
q = queue.Queue() # 同期FIFOキューの作成
def worker():
while True:
item = q.get() # キューからアイテムを取得
print('item is', item) # アイテムを使用
q.task_done() # アイテムの使用完了をキューに知らせる
thread = threading.Thread(target=worker, daemon=True) # デーモンスレッド作成
thread.start() # スレッドを開始
# キューにアイテムを追加
q.put('nyan')
q.put('wan')
q.put('pilolo')
q.join() # キューのアイテムが消費されるのを待つ
このコードでは、worker
という関数を定義しています。この関数は無限ループを行い、キューからアイテムを取得して処理(この場合は単に表示)を行った後、task_done
メソッドを呼び出してアイテムの処理が完了したことをキューに通知します。
以上がPythonのqueue.Queue
とtask_done
メソッドの基本的な使い方です。これらを理解することで、Pythonでのマルチスレッドプログラミングがより効率的になります。