クラスQueueはキューオブジェクトを実装しており、 以下のメソッドを持っています。 このクラスは、他のキュー構造(例えばスタック)を実装するために 派生させられるますが、継承可能なインタフェースはここでは説明しません。 詳しいことはソースコードを見てください。 公開メソッドは次のものです:
) |
) |
True
を返し、そうでないならFalse
を返します。
マルチスレッドセマンティクスにおいて、この値は信頼できません。
) |
True
を返し、そうでないならFalse
を返します。
マルチスレッドセマンティクスにおいて、この値は信頼できません。
item[, block[, timeout]]) |
バージョン 2.3 で 新たに追加 された仕様: the timeout parameter
item) |
put(item, False)
と同じ意味です。
[block[, timeout]]) |
バージョン 2.3 で 新たに追加 された仕様: the timeout parameter
) |
get(False)
と同じ意味です。
キューに入れられたタスクが全て消費者スレッドに処理されたかどうかを追跡するために 2つのメソッドが提供されます。
) |
join() がブロックされていた場合、全itemが処理された (キューにput()された全てのitemに対して task_done() が呼び出されたことを 意味します) 時に復帰します。
キューにあるよりitemの個数よりも多く呼び出された場合、 ValueError が送出されます。 バージョン 2.5 で 新たに追加 された仕様です。
) |
キューにitemが追加される度に、未完了タスクカウントが増やされます。 消費者スレッドが task_done() を呼び出して、itemを受け取ってそれに 対する処理が完了した事を知らせる度に、未完了タスクカウントが減らされます。 未完了タスクカウントが0になったときに、join() のブロックが解除されます。 バージョン 2.5 で 新たに追加 された仕様です。
キューに入れたタスクが完了するのを待つ例:
def worker(): while True: item = q.get() do_work(item) q.task_done() q = Queue() for i in range(num_worker_threads): t = Thread(target=worker) t.setDaemon(True) t.start() for item in source(): q.put(item) q.join() # 全タスクが完了するまでブロック