目次
Queue
基本的な FIFO キュー
LIFO queue
优先级队列
一些常用方法
task_done()
join()
put(item[, block[, timeout]])
get([block[, timeout]])
class Queue.PriorityQueue(maxsize=0)
ホームページ バックエンド開発 Python チュートリアル Pythonのキューモジュールの詳しい説明

Pythonのキューモジュールの詳しい説明

Jul 19, 2017 pm 01:16 PM
python queue

Queue

Queue は、Python 標準ライブラリのスレッド セーフ キュー (FIFO) 実装であり、マルチスレッド プログラミングに適した先入れ先出しデータ構造、つまりプロデューサーとの間で使用されるキューを提供します。情報転送

基本的な FIFO キュー

class Queue.Queue(maxsize=0)

FIFO は先入れ先出しです。 Queue は、非常に簡単に使用できる基本的な FIFO コンテナを提供します。 maxsize は、キューに保存できるデータ数の上限を指定する整数です。制限に達すると、キュー内のデータが消費されるまで挿入によってブロックが発生します。 maxsize が 0 以下の場合、キューのサイズに制限はありません。

例:

1 import Queue2 3 q = Queue.Queue()4 5 for i in range(5):6     q.put(i)7 8 while not q.empty():9     print q.get()
ログイン後にコピー

出力:

01
2
3
4
ログイン後にコピー

LIFO queue

class Queue.LifoQueue(maxsize=0)

LIFOは後入れ先出し、イン、ファーストアウト。スタックと同様に、maxsize の使用法は上記と同じです:

1 import Queue2 3 q = Queue.LifoQueue()4 5 for i in range(5):6     q.put(i)7 8 while not q.empty():9     print q.get()
ログイン後にコピー

出力:

4
3
2
10
ログイン後にコピー

だけであることがわかります。 Queue.Quenu クラスQueue.LifiQueue クラスに置き換えられました

Priority QueueQueue.Quenu类替换为Queue.LifiQueue类

优先级队列

class Queue.PriorityQueue(maxsize=0)

构造一个优先队列。maxsize用法同上。

import Queueimport threadingclass Job(object):def __init__(self, priority, description):
        self.priority = priority
        self.description = descriptionprint 'Job:',descriptionreturndef __cmp__(self, other):return cmp(self.priority, other.priority)

q = Queue.PriorityQueue()

q.put(Job(3, 'level 3 job'))
q.put(Job(10, 'level 10 job'))
q.put(Job(1, 'level 1 job'))def process_job(q):while True:
        next_job = q.get()print 'for:', next_job.description
        q.task_done()

workers = [threading.Thread(target=process_job, args=(q,)),
        threading.Thread(target=process_job, args=(q,))
        ]for w in workers:
    w.setDaemon(True)
    w.start()

q.join()
结果
Job: level 3 job
Job: level 10 job
Job: level 1 jobfor: level 1 jobfor: level 3 jobfor: job: level 10 job
ログイン後にコピー

 

一些常用方法

task_done()

意味着之前入队的一个任务已经完成。由队列的消费者线程调用。每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。

如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。

join()

阻塞调用线程,直到队列中的所有任务被处理掉。

只要有数据被加入队列,未完成的任务数就会增加。当消费者线程调用task_done()(意味着有消费者取得任务并完成任务),未完成的任务数就会减少。当未完成的任务数降到0,join()解除阻塞。

put(item[, block[, timeout]])

将item放入队列中。

  1. 如果可选的参数block为True且timeout为空对象(默认的情况,阻塞调用,无超时)。

  2. 如果timeout是个正整数,阻塞调用进程最多timeout秒,如果一直无空空间可用,抛出Full异常(带超时的阻塞调用)。

  3. 如果block为False,如果有空闲空间可用将数据放入队列,否则立即抛出Full异常

其非阻塞版本为put_nowait等同于put(item, False)

get([block[, timeout]])

从队列中移除并返回一个数据。block跟timeout参数同put方法

其非阻塞方法为`get_nowait()`相当与get(False)

class Queue.PriorityQueue(maxsize=0)

優先キューを構築します。 maxsize の使用方法は上記と同じです。 🎜🎜rrreee🎜🎜 🎜🎜いくつかの一般的なメソッド 🎜🎜🎜task_done()🎜🎜🎜 は、以前にキューに入れられたタスクが完了したことを意味します。キューのコンシューマ スレッドによって呼び出されます。各 get() 呼び出しはタスクを取得し、次の task_done() 呼び出しはタスクが処理されたことをキューに伝えます。 🎜🎜現在の join() がブロックしている場合、キュー内のすべてのタスクが処理されると実行が再開されます (つまり、put() 呼び出しによってキューに入れられた各タスクには、対応する task_done() 呼び出しがあります)。 🎜🎜🎜join()🎜🎜🎜 は、キュー内のすべてのタスクが処理されるまで呼び出しスレッドをブロックします。 🎜🎜キューにデータが追加される限り、未完了のタスクの数は増加します。コンシューマ スレッドが task_done() を呼び出すと (コンシューマがタスクを取得してタスクを完了することを意味します)、未完了のタスクの数が減ります。未完了のタスクの数が 0 になると、join() のブロックが解除されます。 🎜🎜🎜put(item[, block[, timeout]])🎜🎜🎜アイテムをキューに入れます。 🎜
  1. 🎜 オプションのパラメーター block が True で、timeout が空のオブジェクトの場合 (デフォルト、呼び出しをブロックし、タイムアウトなし)。 🎜
  2. 🎜 timeout が正の整数の場合、呼び出しプロセスは最大 timeout 秒間ブロックされます。利用可能な空き領域がない場合は、完全な例外 (タイムアウトによる呼び出しのブロック) がスローされます。 🎜
  3. 🎜block が False の場合、利用可能な空き領域がある場合はデータをキューに入れます。そうでない場合は、すぐに完全な例外がスローされます🎜
🎜 非ブロッキング バージョンput_nowait put(item, False) と同等です🎜🎜🎜get([block[, timeout]])🎜🎜🎜はキューから削除し、データの一部を返します。ブロックおよびタイムアウトのパラメーターは put メソッドと同じです🎜🎜非ブロッキング メソッドは `get_nowait()` であり、get(False) と同等です🎜🎜empty ()🎜🎜キューが空の場合は True を返し、それ以外の場合は False を返します🎜

以上が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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHPおよびPython:さまざまなパラダイムが説明されています PHPおよびPython:さまざまなパラダイムが説明されています Apr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPythonの選択:ガイド PHPとPythonの選択:ガイド Apr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとPython:彼らの歴史を深く掘り下げます PHPとPython:彼らの歴史を深く掘り下げます Apr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

Python vs. JavaScript:学習曲線と使いやすさ Python vs. JavaScript:学習曲線と使いやすさ Apr 16, 2025 am 12:12 AM

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

Sublime Code Pythonを実行する方法 Sublime Code Pythonを実行する方法 Apr 16, 2025 am 08:48 AM

PythonコードをSublimeテキストで実行するには、最初にPythonプラグインをインストールし、次に.pyファイルを作成してコードを書き込み、Ctrl Bを押してコードを実行する必要があります。コードを実行すると、出力がコンソールに表示されます。

vscodeでコードを書く場所 vscodeでコードを書く場所 Apr 15, 2025 pm 09:54 PM

Visual Studioコード(VSCODE)でコードを作成するのはシンプルで使いやすいです。 VSCODEをインストールし、プロジェクトの作成、言語の選択、ファイルの作成、コードの書き込み、保存して実行します。 VSCODEの利点には、クロスプラットフォーム、フリーおよびオープンソース、強力な機能、リッチエクステンション、軽量で高速が含まれます。

Visual StudioコードはPythonで使用できますか Visual StudioコードはPythonで使用できますか Apr 15, 2025 pm 08:18 PM

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

メモ帳でPythonを実行する方法 メモ帳でPythonを実行する方法 Apr 16, 2025 pm 07:33 PM

メモ帳でPythonコードを実行するには、Python実行可能ファイルとNPPEXECプラグインをインストールする必要があります。 Pythonをインストールしてパスを追加した後、nppexecプラグインでコマンド「python」とパラメーター "{current_directory} {file_name}"を構成して、メモ帳のショートカットキー「F6」を介してPythonコードを実行します。

See all articles