# 18.5.8. キュー

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

キュー:

- `Queue`

- `PriorityQueue`

- `LifoQueue`

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` オブジェクトに対して呼ばれたときに送出されます。