iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Queue模块详细介绍及实例
  • 298
分享到

Python Queue模块详细介绍及实例

详细介绍实例模块 2022-06-04 18:06:16 298人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

Python Queue模块 python中,队列是线程间最常用的交换数据的形式。Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外。 创建一个“队列”对象 imp

Python Queue模块

python中,队列是线程间最常用的交换数据的形式。Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外。

创建一个“队列”对象


import Queue
q = Queue.Queue(maxsize = 10)

Queue.Queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。

将一个值放入队列中


q.put(10)

调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。

将一个值从队列中取出


q.get()

调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。

Python Queue模块有三种队列及构造函数:

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 大小对应
q.get([block[, timeout]]) 获取队列,timeout等待时间
q.get_nowait() 相当q.get(False)
非阻塞 q.put(item) 写入队列,timeout等待时间
q.put_nowait(item) 相当q.put(item, False)
q.task_done() 在完成一项工作之后,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()

--结束END--

本文标题: Python Queue模块详细介绍及实例

本文链接: https://www.lsjlt.com/news/13846.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python中re模块的详细介绍
    本篇内容介绍了“python中re模块的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!正则表达式的元字符有. ^ $ * { [ ...
    99+
    2023-06-04
  • Python hashlib模块与subprocess模块使用详细介绍
    目录1、什么是哈希hash2、hash的用途3、如何用4、subprocess模块1、什么是哈希hash hash一类算法,该算法接受传入的内容,经过运算得到一串hash值 hash...
    99+
    2024-04-02
  • Python Fabric 模块 介绍及
    来源:《Python自动化运维》Fabric的安装 Fabric支持pip、easy_install或源码安装方式,很方便解决包依赖的问题,具体安装命令如下( 根据用户环境,自行选择pip或easy_install): pip instal...
    99+
    2023-01-31
    模块 Python Fabric
  • Python模块介绍与使用详细讲解
    目录模块的相关概念 1. 什么是模块2. 使用模块的好处模块的使用1. 自定义模块a) 方法一: 导入模块:b) 方法二c) 导入自己的模块Python中的包 1...
    99+
    2024-04-02
  • Python标准库datetime date模块的详细介绍
    目录前言1、定义1.2、常见错误2、date类常用的函数2.1、获取当期日期2.2、格式化日期2.2.1、ctime()2.2.2、datetime.date对象2.2.3、repl...
    99+
    2024-04-02
  • python中sys模块的介绍与实例
    python版本: Python 2.7.6 1: sys是python自带模块. 利用 import 语句输入sys 模块。 当执行import sys后, python在 s...
    99+
    2024-04-02
  • Node.js模块化的使用详细介绍
    目录什么是模块化编程领域中的模块化模块化规范Node.js中的模块化加载模块Node.js中的模块作用域1. 什么是模块作用域2. 模块作用域的好处向外共享模块作用域中的成员1. m...
    99+
    2024-04-02
  • python中内置库os与sys模块的详细介绍
    目录os包sys模块os包 想要使用os包一样要先导入:import os os包下可以直接调用的函数 下面介绍一下os包中可以直接调用的函数: 例子: 例子: 例子: ...
    99+
    2024-04-02
  • python os模块介绍
    目录1.os 库基本介绍2.路径操作3.进程管理4.环境参数1.os 库基本介绍 os库提供通用的、基本的操作系统交互功能。 三大操作系统: windowsMac OSLinux o...
    99+
    2024-04-02
  • Python之模块介绍
    模块:用一段代码实现了某些功能的代码集合。Python模块分为三种:自定义模块内置标准模块开源模块os模块:提供对操作系统进行调用的接口,以下是方法os.getcwd() :获取当前工作目录,即当前python脚本工作的目录路径示例:>...
    99+
    2023-01-31
    模块 Python
  • Python logging.handlers模块,RotatingFileHandler、TimedRotatingFileHandler 处理器各参数详细介绍
    文章目录 一、RotatingFileHandler 介绍二、TimedRotatingFileHandler 介绍 在python的logging.handlers模块中,提供了很多...
    99+
    2023-09-21
    python
  • Python3 pickle模块的使用方法详细介绍
    pickle模块特点 1、只能在python中使用,只支持python的基本数据类型。 2、可以处理复杂的序列化语法。(例如自定义的类的方法,游戏的存档等) 3、序列化的时候,只是...
    99+
    2024-04-02
  • muduo源码分析之TcpServer模块详细介绍
    这次我们开始muduo源代码的实际编写,首先我们知道muduo是LT模式,Reactor模式,下图为Reactor模式的流程图[来源1] 然后我们来看下muduo的整体架构[来源1...
    99+
    2024-04-02
  • Node.js模块化原理与应用详细介绍
    目录什么是模块化模块化规范node.js中的模块分类加载模块node.js的模块作用域什么是模块作用域模块作用域的好处向外共享模块作用域中的成员module对象module.expo...
    99+
    2024-04-02
  • python模块介绍- socket(1
    底层的socket库可以直接访问本地Csocket库并且可与任何网络服务通信。select同时监控多个sockets,支持网络服务和多个客户端通信。 SocketServer框架抽象了很多创建网络服务器的重复工作。该类来可以使用f...
    99+
    2023-01-31
    模块 python socket
  • Python NumPy随机抽模块介绍及方法
    目录1. 随机数2. 随机抽样3. 正态分布4. 伪随机数的深度思考1. 随机数 np.random.random()是最常用的随机数生成函数,该函数生成的随机数随机均匀分布于[0,...
    99+
    2024-04-02
  • 详细介绍python类及类的用法
    目录一、类的成员1.1 类的属性1.1.1 静态属性的创建方式1.1.2 实例属性1.2 类的方法二、类成员的修饰符三、类的特殊成员3.1 __doc__3.2  ...
    99+
    2024-04-02
  • Java详细介绍单例模式的应用
    目录一、什么是单例模式二、实现单例模式的几种方法1. 懒汉模式(线程不安全)2. 懒汉模式(线程安全)3. 饿汉模式一、什么是单例模式 单例模式(Singleton Pattern)...
    99+
    2024-04-02
  • C++超详细介绍模板
    目录定义例子格式处理方法定义 函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。 ...
    99+
    2024-04-02
  • C++模板超详细介绍
    目录1.前言2.函数模板3.类模板1.前言 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。 通常有两种形式:函数模板和...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作