Pythonのqueue
モジュールは、マルチプロデューサー、マルチコンシューマーのキューを実装しています。このモジュールは、情報を複数のスレッド間で安全に交換する必要があるスレッドプログラミングに特に有用です。
queue
モジュールは、エントリが取得される順序のみが異なる3種類のキューを実装しています。
- FIFOキュー:最初に追加されたタスクが最初に取得されます。
- LIFOキュー:最も最近追加されたエントリが最初に取得されます(スタックのように動作します)。
- 優先度付きキュー:エントリはソートされ(
heapq
モジュールを使用)、最も低い値のエントリが最初に取得されます。
これらのキューは内部的にロックを使用して競合するスレッドを一時的にブロックしますが、スレッド内での再入を処理するようには設計されていません。
また、queue
モジュールは、より小さな機能と引き換えに追加の保証を提供する特定の実装を持つ「シンプル」なFIFOキュータイプ、SimpleQueue
も実装しています。
以下に、各キューの生成方法を示します。
import queue
# FIFOキューの生成
fifo_queue = queue.Queue()
# LIFOキューの生成
lifo_queue = queue.LifoQueue()
# 優先度付きキューの生成
priority_queue = queue.PriorityQueue()
# シンプルキューの生成
simple_queue = queue.SimpleQueue()
これらのキューに要素を追加するには、put
メソッドを使用します。そして、キューから要素を取り出すには、get
メソッドを使用します。
# 要素の追加
fifo_queue.put('item')
# 要素の取り出し
item = fifo_queue.get()
以上がPythonのqueue
モジュールの基本的な使い方です。このモジュールを使うことで、複数のスレッド間で情報を安全に交換することが可能になります。これは、マルチスレッドプログラミングにおいて非常に重要な機能です。