Python Queue模块

这篇文章主要介绍了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免费学习笔记(深入)”;

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:utf8import random,threading,timefrom Queue import Queue#Producer threadclass 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 threadclass 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())        breakclass 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 threaddef 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 Queue模块的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2264312.html

(0)
上一篇 2025年2月27日 08:07:16
下一篇 2025年2月24日 14:47:06

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 利用python如何爬取js里面的内容

    本篇文章给大家分享的内容是3利用python如何爬取js里面的内容 ,有着一定的参考价值,有需要的朋友可以参考一下 一、在编写爬虫软件获取所需内容时可能会碰到所需要的内容是由javascript添加上去的 在获取的时候为空 比如我们在获取新…

    2025年2月27日 编程技术
    200
  • Python中title()方法的使用

    这篇文章主要介绍了python中title()方法的使用简介,现在分享给大家,需要的朋友可以参考下  title()方法返回所有单词的第一个字符大写的字符串的一个副本。语法 以下是title()方法的语法: str.title();登录后复…

    编程技术 2025年2月27日
    200
  • python实现百度语音识别api

    这篇文章主要为大家详细介绍了python实现百度语音识别api,具有一定的参考价值,有需要的朋友可以参考一下 本文实例为大家分享了ython实现百度语音识别的具体代码,供大家参考,具体内容如下 详细百度语音识别api文档 先下载python…

    编程技术 2025年2月27日
    200
  • Python Selenium Cookie 绕过验证码实现登录示例代码_

    这篇文章主要介绍了python selenium cookie 绕过验证码实现登录示例代码,现在分享给大家,有需要的朋友可以参考一下 之前介绍过通过cookie 绕过验证码实现登录的方法。这里并不多余,会增加分析和另外一种方法实现登录。 1…

    2025年2月27日
    200
  • python读取文本中数据并转化为DataFrame的实例_python

    这篇文章给大家分享的是python读取文本中数据并转化为dataframe的实例,具有一定的参考价值,希望可以帮助到有需要的人 在技术问答中看到一个这样的问题,感觉相对比较常见,就单开一篇文章写下来。 从纯文本格式文件 “file_in”中…

    2025年2月27日
    200
  • python怎么处理dataframe的时间字段

    这次给大家带来python怎么处理dataframe的时间字段,python处理dataframe时间字段的注意事项有哪些,下面就是实战案例,一起来看一下。 在机器学习过程中,通常会通过pandas读取csv文件,保持成dadaframe格…

    编程技术 2025年2月27日
    200
  • python怎么调用API实现智能回复功能

    python调用api的方法:首先创建好公众号平台;然后在帮助中心里获取APIkey,并填入相关代码;接着运行代码;最后在弹出的二维码界面中,进行扫描并等待一段时间即可。 这次给大家带来python如何调用API实现智能回复功能,pytho…

    2025年2月27日
    200
  • python读取文本数据并转化为DataFrame格式的方法详解

    这次给大家带来python读取文本数据并转化为DataFrame格式的方法详解,python读取文本数据并转化为DataFrame的注意事项有哪些,下面就是实战案例,一起来看一下。 在技术问答中看到一个这样的问题,感觉相对比较常见,就单开一…

    2025年2月27日
    200
  • python怎样实现百度语音识别api的步奏详解

    这次给大家带来python怎样实现百度语音识别api的步奏详解,python实现百度语音识别api的注意事项有哪些,下面就是实战案例,一起来看一下。 本文实例为大家分享了ython实现百度语音识别的具体代码,供大家参考,具体内容如下 详细百…

    编程技术 2025年2月27日
    200
  • python 实用函数进阶(更新中)

    本篇文章分享的内容是python 实用函数进阶,现在分享给大家,有需要的朋友可以参考一下本篇文章的内容 1.pyhton断言 如何为assert断言语句添加异常参数 assert的异常参数,其实就是在断言表达式后添加字符串信息,用来解释断言…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论