18.5.8. キュー¶
キュー:
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
を返すことはありません。
-
get_nowait
()¶ キューから要素を削除して返します。
直ちに利用できるアイテムがあるときはそれを、そうでなければ
QueueEmpty
を返します。
-
coroutine
join
()¶ キューにあるすべてのアイテムが取り出されて処理されるまでブロックします。
未完了のタスクのカウント値はキューにアイテムが追加されるときは常に加算され、コンシューマースレッドが
task_done()
を呼び出してアイテムの回収とその全処理の完了が示されるときは常に減算されます。未完了のタスクのカウント値がゼロになった場合、join()
のブロックが解除されます。このメソッドは コルーチン です。
バージョン 3.4.4 で追加.
-
coroutine
put
(item)¶ 要素をキューに入れます。キューがいっぱいの場合、要素を追加する前にスロットが利用できるまで待機します。
このメソッドは コルーチン です。
参考
full()
メソッド。
-
qsize
()¶ キュー内のアイテム数です。
-
task_done
()¶ キューに入っていたタスクが完了したことを示します。
キューコンシューマーによって使用されます。タスクの取得に
get()
を使用し、その後のtask_done()
の呼び出しでタスクの処理が完了したことをキューに通知します。join()
が現在ブロック中だった場合、全アイテムが処理されたとき (put()
でキューに追加された全アイテムのtask_done()
の呼び出しを受信したとき) に再開します。キューに追加されているアイテム数以上の呼び出しが行われたときに
ValueError
を送出します。バージョン 3.4.4 で追加.
-
maxsize
¶ キューに追加できるアイテム数です。
-
18.5.8.2. PriorityQueue¶
18.5.8.3. LifoQueue¶
18.5.8.3.1. 例外¶
-
exception
asyncio.
QueueEmpty
¶ get_nowait()
メソッドが空のQueue
オブジェクトに対して呼ばれたときに送出されます。
-
exception
asyncio.
QueueFull
¶ put_nowait()
メソッドが full のQueue
オブジェクトに対して呼ばれたときに送出されます。