I.はじめに
task_done()
このメソッドはPython
モジュールによって提供されqueue
、キュー内の項目が処理されたことをキュー マネージャーに通知するために使用されます。
queue.task_done()
これは、キュー内の項目が処理されたことをオブジェクトにQueue
通知するために使用されるオブジェクトのメソッドです。Queue
通常、Queue オブジェクトを使用する場合、プロデューサーがデータをキューに入れた後、コンシューマーはキューからデータを取り出して処理する必要があります。コンシューマはデータ項目を処理した後、queue.task_done()
メソッドを使用してキューに通知できるため、Queue
オブジェクトはキュー内のどの項目が処理されたかを知ることができます。
キューを使用するときは、通常、put()
メソッドを使用して項目をキューに追加し、その後 get() メソッドを使用してキューから項目を取得して処理します。項目を処理した後、task_done()
メソッドを使用して、項目が処理されたことをキューマネージャーに通知できます。
すべての項目が処理されるのを待つメソッドを使用する場合join()
、このメソッドはすべての項目が処理された後に戻ります。
2. 基本的な使い方
サンプルコード
import queue
import threading
def worker(q):
while True:
item = q.get()
print("Processing", item)
q.task_done()
if __name__ == '__main__':
q = queue.Queue()
for i in range(5):
q.put(i)
for i in range(3):
t = threading.Thread(target=worker, args=(q,))
t.daemon = True
t.start()
q.join()
print("All items processed.")
上記のサンプル コードでは、まずキュー q を作成し、そこに 5 つのアイテムを追加します。worker()
次に、キューから項目を取得する関数とtask_done()
それを破棄するメソッドを使用する 3 つのスレッドを作成しました。join()
全項目の処理が完了するまで待つ方法を採用したため、全項目の処理が完了すると、最終的に「全項目処理されました。」が出力されます。
操作結果:
この例では、task_done()
項目がキューから削除されるたびにこのメソッドが 1 回呼び出されるため、キュー マネージャーは最終的にすべての項目が処理されたことを認識します。
3. リアルタイムタスク完了通知の利用
読みながら読むサンプルコード:
ここではプロデューサとコンシューマが定義され、Queue
データ送信にはオブジェクトが使用されます。プロデューサは 10 個のデータ項目をキューに入れ、各データ項目の間に 1 秒間一時停止します。一方、コンシューマはキューからデータ項目を削除して処理し、各データ項目が取り出された後 2 秒間一時停止します。コンシューマーが各データ項目を処理した後、q.task_done()
メソッドを使用してキューに通知し、データ項目が処理されたことをキューが認識できるようにします。
import queue
import threading
import time
def producer(q):
for i in range(10):
q.put(i)
print("[Producer] Put item {} into queue".format(i))
time.sleep(1)
def consumer(q):
while True:
item = q.get()
print("[Consumer] Get item {} from queue".format(item))
q.task_done()
print(f'task {
threading.current_thread().name} done! item-->:{
item}')
time.sleep(2)
if __name__ == '__main__':
q = queue.Queue()
t1 = threading.Thread(target=producer, args=(q,))
t2 = threading.Thread(target=consumer, args=(q,))
t1.start()
t2.start()
t1.join()
t2.join()
実行結果:
ここのコードはスレッドを使用してプロデューサーとコンシューマーをシミュレートし、プロデューサーとコンシューマーの両方が同時にデータの書き込みと取得を行うため、データの生成と消費が交互に実行されることがわかります。
特定の用途では、よりさまざまなビジネス シナリオで使用方法を選択する必要があります
以上、Python の基本的な使い方 - Queue [queue] task_done() と join() の紹介でした。読んでいただきありがとうございます。お役に立てれば幸いです。