Python的并发并行[2] -> 队列 -> queue 模块

queue 模块 / queue Module



1 常量 / Constants

Pass

2 函数 / Function

Pass

3 / Class

3.1 Queue

类实例化:queue = queue.Queue(maxsize=0)

类的功能:用于生成一个先入先出队列实例

传入参数: maxsize

maxsize: int类型,队列的最大值,无空间时阻塞,未指定时为无限队列

返回参数: queue

queue: instance类型,生成的先入先出队列实例

3.1.1 put()方法

函数调用: queue.put(item, block=True, timeout=None)

函数功能:将item放进队列中

传入参数: item, block, timeout

item: int/str/obj等类型,放进队列中的项目

block: bool类型,设置阻塞,True则阻塞,False则会引发异常

timeout: None/int类型,设置阻塞超时时间(s),None则无限时阻塞

返回参数:

3.1.2 get()方法

函数调用: item = queue.get(block=True, timeout=None)

函数功能:将item从队列中取出

传入参数: block, timeout

block: bool类型,设置阻塞,True则阻塞,False则会引发异常

timeout: None/int类型,设置阻塞超时时间(s),None则无限时阻塞

返回参数: item

item: int/str/obj等类型,从队列中取出的项目

3.1.3 put_nowait()方法

函数调用: queue.put_nowait(item)

函数功能:无等待将item放进队列中,相当于put(item, False),失败则引发Full异常

传入参数: item

item: int/str/obj等类型,放进队列中的项目

返回参数:

3.1.4 get_nowait()方法

函数调用: item = queue.get_nowait()

函数功能:无等待将item从队列中取出,相当于get(False),失败则引发Empty异常

传入参数:

返回参数: item

item: int/str/obj等类型,队列中取出的项目

3.1.5 task_done()方法

函数调用: queue.task_done()

函数功能: 用于表明一个任务已经完成,设置完成标志,常用于队列的消耗线程,每一个get()函数取出一个item,随后可以设置一个task_done,当所有队列的任务都标记完成后,join将释放阻塞

传入参数:

返回参数:

3.1.6 join ()方法

函数调用: queue.join()

函数功能:用于阻塞当前的线程,等待join之前所有的队列(包括join之前入列并出列的任务)任务都设置了task_done标志后,才会解除阻塞

传入参数:

返回参数:

3.1.7 qsize()方法

函数调用: size = queue.qsize()

函数功能:返回当前队列的大小(由于其他线程存在修改,该值并不准确,为近似值)

传入参数:

返回参数: size

siez: int类型,队列中item的数量

3.1.8 empty()方法

函数调用: status = queue.empty()

函数功能:返回当前队列的状态,为空返回True,否则返回False,与qsize一样,返回的是一个近似值,若需要等待所有队列结束,建议使用join()函数

传入参数:

返回参数: status

status: bool类型,True表示当前队列为空

3.1.9 full()方法

函数调用: status = queue.full()

函数功能:返回当前队列的状态,队列已满返回True,否则返回False,同样返回的是一个近似值

传入参数:

返回参数: status

status: bool类型,True表示当前队列为空

3.2 LifoQueue

类实例化:queue = queue.LifoQueue(maxsize=0)

类的功能:用于生成一个后入先出队列实例

传入参数: maxsize

maxsize: int类型,队列的最大值,无空间时阻塞,未指定时为无限队列

返回参数: queue

queue: instance类型,生成的后入先出队列实例

Note:

对于LifoQueue类,其基类是Queue,在源代码中重定义了Queue的_init, _qsize, _put, _get函数,使其在队列的处理顺序上有所不同(其本质为向队列列表中取出item时_get()函数使用的是popleft函数还是pop函数),其父类的函数均可以继承使用。

3.3 PriorityQueue

类实例化:queue = queue.PriorityQueue(maxsize=0)

类的功能:用于生成一个优先级队列实例,最小的最优取出

传入参数: maxsize

maxsize: int 类型,队列的最大值,无空间时阻塞,未指定时为无限队列

返回参数: queue

queue: instance类型,生成的优先级队列实例

Note:

对于PriorityQueue类,其基类也是Queue,同样在源代码中重定义了Queue的_init, _qsize, _put, _get函数,使其在队列的处理顺序上有所不同(其本质为向队列列表中取出item时_get()使用了heappop函数,而放入时使用了heappush函数),父类函数同样可继承使用。

3.4 Empty异常类

类实例化:

类的功能:用于当队列为空且调用get*()方法时抛出的异常

传入参数:

返回参数:

3.5 Full异常类

类实例化:

类的功能:用于当队列已满且调用put*()方法时抛出的异常

传入参数:

返回参数:

原文地址:https://www.cnblogs.com/stacklike/p/8166594.html

时间: 2024-10-10 17:33:23

Python的并发并行[2] -> 队列 -> queue 模块的相关文章

Python的并发并行[3] -> 进程 -> subprocess 模块

subprocess 模块 0 模块描述 / Module Description From subprocess module: """Subprocesses with accessible I/O streams This module allows you to spawn processes, connect to their input/output/error pipes, and obtain their return codes. For a complet

Python 单向队列Queue模块详解

单向队列Queue,先进先出 '''A multi-producer, multi-consumer queue.''' try: import threading except ImportError: import dummy_threading as threading from collections import deque from heapq import heappush, heappop from time import monotonic as time __all__ =

Python队列queue模块

Python中queue模块常用来处理队列相关问题 队列常用于生产者消费者模型,主要功能为提高效率和程序解耦 1. queue模块的基本使用和相关说明 # -*- coding:utf-8 -*- # Author:Wong Du ''' 队列常用于生产者消费者模型, 主要功能为提高效率和程序解耦 ''' import queue """实例化队列对象不同规则的三种方法""" q1 = queue.Queue(maxsize=2) # 先入先出

python 归纳 (十四)_队列Queue实现生产者消费者

# -*- coding: UTF-8 -*- """ 多线程的生产者,消费者 使用队列Queue """ import Queue import threading import time import random queue = Queue.Queue(3) # 创建3个大小的队列 class Producer(threading.Thread): """ 生产者,往队列中写数据 ""&qu

python实现stack(栈)和队列(queue)

栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 stack和queue是没有查询具体某一个位置的元素的操作的.但是他们的排列是按顺序的 对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求.当然,我们也可以使用链表来实现. stack的实现代码(使用python内置的list),实现起来是非常的简单,就是list的一些常用操作

Python的并发并行[4] -> 并发 -> 利用线程池启动线程

利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 1 from concurrent.futures import ThreadPoolExecutor as tpe 2 from concurrent.futures import ProcessPoolExecutor as ppe 3 from time import ctime, sleep 4 from random import randint 5 6 def f

Python之路——并行编程之multiprocessing模块

Process 1 import socket 2 import time 3 from multiprocessing import Process 4 5 def talk(conn): 6 if type(conn)==socket.socket(): 7 conn.send(b'connected') 8 msg = conn.recv(1024) 9 print(msg) 10 conn.close() 11 12 13 if __name__ == '__main__': 14 sk

进击的Python【第九章】:paramiko模块、线程与进程、各种线程锁、queue队列、生产者消费者模型

一.paramiko模块 他是什么东西? paramiko模块是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接. 先来个实例: 1 import paramiko 2 # 创建SSH对象 3 ssh = paramiko.SSHClient() 4 5 # 允许连接不在know_hosts文件中的主机 6 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 7 # 连接服务器 8 ss

python 3.x 学习笔记16 (队列queue 以及 multiprocessing模块)

1.队列(queue) 用法: import queue q = queue.Queue() #先进先出模式 q.put(1) #存放数据在q里 作用: 1)解耦    2)提高效率 class queue.Queue(maxsize=0)                        #先入先出class queue.LifoQueue(maxsize=0)                  #后进先出 class queue.PriorityQueue(maxsize=0)