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