18.5.8。 キュー
ソースコード: :source: `Lib / asyncio / queues.py`
キュー:
asyncioキューAPIは、キューモジュール(キュー、優先度キュー、 LifoQueue )のクラスに近いように設計されていますが、 timeout パラメーター。 asyncio.wait_for()
関数を使用して、タイムアウト後にタスクをキャンセルできます。
18.5.8.1。 列
- class asyncio.Queue(maxsize=0, \*, loop=None)
生産者と消費者のコルーチンを調整するのに役立つキュー。
maxsize がゼロ以下の場合、キューサイズは無限大です。
0
より大きい整数の場合、キューが maxsize に達すると、get()
によってアイテムが削除されるまで、yield from put()
はブロックされます。標準ライブラリ queue とは異なり、 qsize()を使用すると、このキューのサイズを確実に知ることができます。これは、シングルスレッドの非同期アプリケーションが qsize()の呼び出し中に中断されないためです。 そしてキューで操作を実行します。
このクラスはスレッドセーフではありません。
バージョン3.4.4で変更:新しい
join()
および task_done()メソッド。- empty()
キューが空の場合は
True
を返し、それ以外の場合はFalse
を返します。
- full()
キューに maxsize アイテムがある場合は、
True
を返します。ノート
キューが
maxsize=0
(デフォルト)で初期化された場合、 full()がTrue
になることはありません。
- get_nowait()
キューからアイテムを削除して返します。
アイテムがすぐに利用できる場合はアイテムを返します。それ以外の場合は、 QueueEmpty を上げます。
- put_nowait(item)
ブロックせずにアイテムをキューに入れます。
すぐに利用できる空きスロットがない場合は、 QueueFull を上げます。
- qsize()
キュー内のアイテムの数。
- task_done()
以前にキューに入れられたタスクが完了したことを示します。
キューコンシューマーによって使用されます。 タスクのフェッチに使用される
get()
ごとに、 task_done()への後続の呼び出しは、タスクの処理が完了したことをキューに通知します。join()
が現在ブロックしている場合、すべてのアイテムが処理されると再開されます(つまり、put()
待ち行列)。キューに配置されたアイテムよりも多く呼び出された場合、 ValueError を発生させます。
バージョン3.4.4の新機能。
- maxsize
キューで許可されているアイテムの数。
18.5.8.2。 PriorityQueue
- class asyncio.PriorityQueue
キューのサブクラス。 優先順位の高い順にエントリを取得します(最初に低いものから)。
エントリは通常、次の形式のタプルです:(優先順位番号、データ)。
18.5.8.3。 LifoQueue
- class asyncio.LifoQueue
- Queue のサブクラスで、最後に追加されたエントリを最初に取得します。
18.5.8.3.1。 例外
- exception asyncio.QueueEmpty
- 空の Queue オブジェクトで get_nowait()メソッドが呼び出されたときに例外が発生しました。
- exception asyncio.QueueFull
- put_nowait()メソッドがいっぱいの Queue オブジェクトで呼び出されたときに例外が発生しました。