Pythonキューモジュール

Apr 09, 2018 pm 05:31 PM
python queue モジュール

この記事では主に Python Queue モジュールを紹介します。必要な友達はそれを参照してください。

Python では、キューはスレッド間でデータを交換する最も一般的な形式です。 Queue モジュールは、キュー操作を提供するモジュールです。シンプルで使いやすいですが、注意しないと事故が発生する可能性があります。

「キュー」オブジェクトを作成する
import Queue
q = Queue.Queue(maxsize = 10)
Queue.Queueクラスはキューの同期実装です。キューの長さは無限または有限にすることができます。キューの長さは、Queue コンストラクターのオプションのパラメーター maxsize を通じて設定できます。 maxsize が 1 未満の場合、キューの長さは無制限であることを意味します。

キューに値を入れる
q.put(10)
キューオブジェクトのput()メソッドを呼び出して、キューの最後に項目を挿入します。 put() には 2 つのパラメータがあります。最初の項目は必須で、挿入された項目の値です。2 番目のブロックはオプションのパラメータで、デフォルトは
1 です。キューが現在空でブロックが 1 の場合、put() メソッドにより、データ ユニットが空になるまで呼び出しスレッドが一時停止します。 block が 0 の場合、put メソッドは完全な例外をスローします。

キューから値を削除する
q.get()
キューオブジェクトのget()メソッドを呼び出してキューの先頭から項目を削除し、項目を返します。オプションのパラメータは block で、デフォルトは True です。キューが空で、ブロックが True の場合、get() により、項目が使用可能になるまで呼び出しスレッドが一時停止します。キューが空でブロックが False の場合、キューは Empty 例外をスローします。

Python Queue モジュールには 3 つのキューとコンストラクターがあります:
1. Python Queue モジュールの FIFO キューは先入れ先出しです。 class Queue.Queue(maxsize)
2. LIFO はヒープに似ており、先入れ後出しです。 class Queue.LifoQueue(maxsize)
3. 優先キューレベルが低いほど早く出力される別の方法もあります。 class Queue.PriorityQueue(maxsize)

このパッケージの共通メソッド (q = Queue.Queue()):
q.qsize() キューのサイズを返します
q.empty() キューが空、Trueを返す、そうでない場合はFalse
q.full() キューがいっぱいの場合はTrueを返し、それ以外の場合はFalse
q.fullはmaxsizeのsizeに対応します
q.get([block[, timeout]]) キューを取得、タイムアウト待機時間
q .get_nowait() は q.get(False) と同等
ノンブロッキング q.put(item) はキューに書き込み、タイムアウト待機時間
q.put_nowait(item) は q.put(item) と同等, False)
q.task_done() in タスクの完了後、q.task_done() 関数はタスクが完了したキューにシグナルを送信します。q.join() は実際には、実行する前にキューが空になるまで待機することを意味します。例:

乱数をキューに連続的に生成するスレッドを実装します (Queue モジュールの使用を検討してください) 上記のキューから奇数を連続的に取り出すスレッドを実装します 偶数を連続的に取り出す別のスレッドを実装します上記のキューの番号

#!/usr/bin/env python
#coding:utf8
import random,threading,time
from Queue import Queue
#Producer thread
class Producer(threading.Thread):
  def __init__(self, t_name, queue):
    threading.Thread.__init__(self,name=t_name)
    self.data=queue
  def run(self):
    for i in range(10):  #随机产生10个数字 ,可以修改为任意大小
      randomnum=random.randint(1,99)
      print "%s: %s is producing %d to the queue!" % (time.ctime(), self.getName(), randomnum)
      self.data.put(randomnum) #将数据依次存入队列
      time.sleep(1)
    print "%s: %s finished!" %(time.ctime(), self.getName())
 
#Consumer thread
class Consumer_even(threading.Thread):
  def __init__(self,t_name,queue):
    threading.Thread.__init__(self,name=t_name)
    self.data=queue
  def run(self):
    while 1:
      try:
        val_even = self.data.get(1,5) #get(self, block=True, timeout=None) ,1就是阻塞等待,5是超时5秒
        if val_even%2==0:
          print "%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(),self.getName(),val_even)
          time.sleep(2)
        else:
          self.data.put(val_even)
          time.sleep(2)
      except:   #等待输入,超过5秒 就报异常
        print "%s: %s finished!" %(time.ctime(),self.getName())
        break
class Consumer_odd(threading.Thread):
  def __init__(self,t_name,queue):
    threading.Thread.__init__(self, name=t_name)
    self.data=queue
  def run(self):
    while 1:
      try:
        val_odd = self.data.get(1,5)
        if val_odd%2!=0:
          print "%s: %s is consuming. %d in the queue is consumed!" % (time.ctime(), self.getName(), val_odd)
          time.sleep(2)
        else:
          self.data.put(val_odd)
          time.sleep(2)
      except:
        print "%s: %s finished!" % (time.ctime(), self.getName())
        break
#Main thread
def main():
  queue = Queue()
  producer = Producer('Pro.', queue)
  consumer_even = Consumer_even('Con_even.', queue)
  consumer_odd = Consumer_odd('Con_odd.',queue)
  producer.start()
  consumer_even.start()
  consumer_odd.start()
  producer.join()
  consumer_even.join()
  consumer_odd.join()
  print 'All threads terminate!'
 
if __name__ == '__main__':
  main()
ログイン後にコピー
                                                                                                                        

以上がPythonキューモジュールの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonパラメーター注釈は文字列を使用できますか? Pythonパラメーター注釈は文字列を使用できますか? Apr 01, 2025 pm 08:39 PM

Pythonパラメーター注釈の代替使用Pythonプログラミングでは、パラメーターアノテーションは、開発者が機能をよりよく理解して使用するのに役立つ非常に便利な機能です...

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Apr 01, 2025 pm 11:30 PM

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトを書くときは、以前の出力をカーソル位置にクリアするのが一般的です...

Python hourglassグラフ図面:可変未定義エラーを避ける方法は? Python hourglassグラフ図面:可変未定義エラーを避ける方法は? Apr 01, 2025 pm 06:27 PM

Python:Hourglassグラフィック図面と入力検証この記事では、Python NoviceがHourglass Graphic Drawingプログラムで遭遇する可変定義の問題を解決します。コード...

PythonおよびOCRテクノロジーを使用して、複雑な検証コードをクラックしようとする方法は? PythonおよびOCRテクノロジーを使用して、複雑な検証コードをクラックしようとする方法は? Apr 01, 2025 pm 10:18 PM

毎日のネットワークインタラクションでPythonを使用したクラッキング検証コードの調査、検証コードは、自動化されたプログラムの悪意のある操作を防ぐための一般的なセキュリティメカニズムです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

Pythonクロスプラットフォームデスクトップアプリケーション開発:どのGUIライブラリが最適ですか? Pythonクロスプラットフォームデスクトップアプリケーション開発:どのGUIライブラリが最適ですか? Apr 01, 2025 pm 05:24 PM

Pythonクロスプラットフォームデスクトップアプリケーション開発ライブラリの選択多くのPython開発者は、WindowsシステムとLinuxシステムの両方で実行できるデスクトップアプリケーションを開発したいと考えています...

See all articles