ホームページ  >  記事  >  バックエンド開発  >  Python スレッドでのキュー (キュー) モジュールの使用法 (例付き)

Python スレッドでのキュー (キュー) モジュールの使用法 (例付き)

不言
不言オリジナル
2018-09-11 16:48:452284ブラウズ

この記事の内容は、Python スレッドでのキュー (キュー) モジュールの使用法に関するもので、一定の参考価値があります。必要な友人は参考にしていただければ幸いです。

キュー モジュールは、さまざまな [マルチプロデューサー-マルチコンシューマー] キューを実装します。複数の実行スレッド間で情報を安全に交換するために使用できます。

キュー モジュールは 3 つの異なるキュー クラスを定義します。

3 つの異なるキュー クラス

q=Queue(maxsize): FIFO (先入れ先出し、先入れ先出し) キューを作成します。 maxsize は、キューに入れるアイテムの最大数です。
maxsize パラメータを省略するか 0 に設定すると、キューのサイズは無限になります。

q=LifoQueue(maxsize): LIFO (後入れ先出し、後入れ先出し) キュー (スタック) を作成します。

q=PriorityQueue(maxsize): 項目を優先度の低いものから高いものへの順序で配置する優先キューを作成します。
この種のキューを使用する場合、項目は (priority, data) の形式のタプルである必要があります。ここで、priority は優先度を識別する番号です。

一般的なメソッド

q.size(): キューの正しいサイズを返します。他のスレッドがこのキューを更新している可能性があるため、このメソッドによって返される数値は信頼できません。

q.empty(): キューが空の場合は True を返し、それ以外の場合は False を返します。

q.full(): キューがいっぱいの場合は True を返し、それ以外の場合は False を返します。

q.put(item,block,timeout): アイテムをキューに入れます。
block が True (デフォルト値) に設定されている場合、キューに空き位置が現れるまで呼び出し元はブロックされます。
block が False に設定されている場合、キューがいっぱいになると、このメソッドは Full 例外をスローします。

q.put_nowait(item): q.put(item,False) と同等

q.get(block, ti​​meout): キューからアイテムを削除し、 item を返します。
block が True (デフォルト値) に設定されている場合、呼び出し元は利用可能なアイドル時間がキューに表示されるまでブロックされます。
block が False に設定されている場合、キューが空のときに Empty 例外がスローされます。
timeout はオプションのタイムアウト値を秒単位で指定します。タイムアウトになると、空の例外がスローされます。

q.get_nowait(): get(0)

q.task_done() と同等: 項目の処理が終了したことを示すために、キュー内のデータのコンシューマーによって使用されます。このメソッドを使用する場合は、キューから削除された項目ごとに 1 回呼び出す必要があります。

q.join(): キュー内のすべての項目が削除されて処理されるまでブロックします。このメソッドは、キュー内の項目ごとに q.task_done() メソッドが 1 回呼び出されると、直接戻ります。

例:

キューを使用すると、通常、マルチスレッド プログラムを簡素化できます。たとえば、共有キューを使用すると、保護のためにロックに依存せずにスレッドを接続できます。

このモデルでは、ワーカー スレッドは通常、データのコンシューマとして機能します。

from threading import Thread
from queue import Queue
class WorkerThread(Thread):
    def __init__(self,*args,**kwargs):
        Thread.__init__(self,*args,**kwargs)
        self.input_queue=Queue()

    def send(self,item):
        self.input_queue.put(item)
    def close(self):
        self.input_queue.put(None)
        self.input_queue.join()
    def run(self):
        while True:
            item=self.input_queue.get()
            if item is None:
                break
            #实际开发中,此处应该使用有用的工作代替
            print(item)
            self.input_queue.task_done()
        #完成,指示收到和返回哨兵
        self.input_queue.task_done()
        return

if __name__=="__main__":
    w=WorkerThread()
    w.start()
    w.send("php")
    w.send("中")
    w.send("文")
    w.send("网")
    w.close()

実行結果:

php
中
文
网

関連する推奨事項:

Python スレッド優先キュー (キュー) 原理の包括的な分析

Python でのスレッド同期にキューと条件を使用する方法

以上がPython スレッドでのキュー (キュー) モジュールの使用法 (例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。