18.5.8. キュー

ソースコード: Lib/asyncio/queues.py

キュー:

asyncio queue API は queue モジュールのクラス (Queue, PriorityQueue, LifoQueue) に近くなるよう設計されましたが、 timeout 引数はありません。 asyncio.wait_for() 関数を用いてタイムアオウト後にタスクをキャンセルすることが出来ます。

18.5.8.1. Queue

class asyncio.Queue(maxsize=0, *, loop=None)

プロデューサーおよびコンシューマーコルーチンの連係に役立つキューです。

maxsize がゼロ以下であれば、キューの長さは無限になります。0 より大きい整数の場合、キューの長さが maxsize に達すると yield from put() はアイテムが get() で除去されるまでブロックします。

標準ライブラリの queue とは異なり、qsize() で確実にキューの長さを確認できます。シングルスレッドの asyncio アプリケーションは qsize() の呼び出しと Queue に対する操作の間に割り込まれることはありません。

このクラスは スレッド安全ではありません

バージョン 3.4.4 で変更: 新たなメソッド join() ならびに task_done()

empty()

キューが空ならば True を、そうでなければ False を返します。

full()

キューに要素が maxsize 個あれば True を返します。

注釈

Queue が maxsize=0 (デフォルト) で初期化された場合、full()True を返すことはありません。

coroutine get()

キューから要素を削除して返します。キューが空の場合項目が利用可能になるまで待機します。

このメソッドは コルーチン です。

参考

empty() メソッド。

get_nowait()

キューから要素を削除して返します。

直ちに利用できるアイテムがあるときはそれを、そうでなければ QueueEmpty を返します。

coroutine join()

キューにあるすべてのアイテムが取り出されて処理されるまでブロックします。

未完了のタスクのカウント値はキューにアイテムが追加されるときは常に加算され、コンシューマースレッドが task_done() を呼び出してアイテムの回収とその全処理の完了が示されるときは常に減算されます。未完了のタスクのカウント値がゼロになった場合、join() のブロックが解除されます。

このメソッドは コルーチン です。

バージョン 3.4.4 で追加.

coroutine put(item)

要素をキューに入れます。キューがいっぱいの場合、要素を追加する前にスロットが利用できるまで待機します。

このメソッドは コルーチン です。

参考

full() メソッド。

put_nowait(item)

ブロックせずにアイテムをキューに追加します。

直ちに利用できるスロットがない場合、QueueFull を送出します。

qsize()

キュー内のアイテム数です。

task_done()

キューに入っていたタスクが完了したことを示します。

キューコンシューマーによって使用されます。タスクの取得に get() を使用し、その後の task_done() の呼び出しでタスクの処理が完了したことをキューに通知します。

join() が現在ブロック中だった場合、全アイテムが処理されたとき (put() でキューに追加された全アイテムの task_done() の呼び出しを受信したとき) に再開します。

キューに追加されているアイテム数以上の呼び出しが行われたときに ValueError を送出します。

バージョン 3.4.4 で追加.

maxsize

キューに追加できるアイテム数です。

18.5.8.2. PriorityQueue

class asyncio.PriorityQueue

Queue のサブクラスです; 優先順位に従ってエントリを回収します (最低が最初)。

エントリは、(優先順位, データ) 形式のタプルです。

18.5.8.3. LifoQueue

class asyncio.LifoQueue

Queue のサブクラスです。エントリは最後に追加されたものから回収されます。

18.5.8.3.1. 例外

exception asyncio.QueueEmpty

get_nowait() メソッドが空の Queue オブジェクトに対して呼ばれたときに送出されます。

exception asyncio.QueueFull

put_nowait() メソッドが full の Queue オブジェクトに対して呼ばれたときに送出されます。