Python提供了Queue模块来专门实现消息队列Queue对象

Queue对象实现一个fifo队列(其他的还有lifo、priority队列,这里不再介绍)。queue只有maxsize一个构造参数,用来指定队列容量,指定为0的时候代表容量无限。主要有以下成员函数:

Queue.qsize():返回消息队列的当前空间。返回的值不一定可靠。

Queue.empty():判断消息队列是否为空,返回True或False。同样不可靠。

Queue.full():类似上边,判断消息队列是否满

Queue.put(item, block=True, timeout=None):往消息队列中存放消息。block可以控制是否阻塞,timeout指定阻塞时候的等待时间。如果不阻塞或者超时,会引起一个full exception。

Queue.put_nowait(item):相当于put(item, False).

Queue.get(block=True, timeout=None):获取一个消息,其他同put。

以下两个函数用来判断消息对应的任务是否完成。

Queue.task_done():接受消息的线程通过调用这个函数来说明消息对应的任务已完成。

Queue.join(): 实际上意味着等到队列为空,再执行别的操作

例子:

#!/usr/bin/env python#-*- coding:utf-8 -*-#@time: 2017/12/18 19:31#Author: caicai#@File: demon3.py

'''写一个消费者和生产者,为了练习多线程,用多线程的方式实现,并通过类的重写的方法来实现'''

from Queue importQueuefrom threading importThreadimporttime#生成类,输出一堆数字

classProceduer(Thread):def __init__(self,queue):

super(Proceduer, self).__init__()

self.queue=queuedefrun(self):try:for i in xrange(1,10):print("put data is: {0} to queue".format(i))

self.queue.put(i)exceptException as e:print("put data error!")raisee#消费者类

classConsumer_odd(Thread):def __init__(self,queue):

super(Consumer_odd, self).__init__()

self.queue=queuedefrun(self):try:while notself.queue.empty():

number=self.queue.get()if number % 2 !=0:print("get {0} from queue ODD".format(number))else:

self.queue.put(number)

time.sleep(1)exceptException as e:raiseeclassConsumer_even(Thread):def __init__(self,queue):

super(Consumer_even, self).__init__()

self.queue=queuedefrun(self):try:while not self.queue.empty(): #queue.empty()

number =self.queue.get()if number % 2 ==0:print("get {0} from queue EVEN,thread name is: {1}".format(number, self.getName()))else:

self.queue.put(number)

time.sleep(1)exceptException as e:raiseedefmain():

queue=Queue()

p= Proceduer(queue=queue)

p.start()

p.join()

time.sleep(1)

c1= Consumer_odd(queue=queue)

c2= Consumer_even(queue=queue)

c1.start()

c2.start()

c1.join()

c2.join()print("All threads terminate!")if __name__ == '__main__':

main()

输出结果:

put datais: 1to queue

put datais: 2to queue

put datais: 3to queue

put datais: 4to queue

put datais: 5to queue

put datais: 6to queue

put datais: 7to queue

put datais: 8to queue

put datais: 9to queue

get1 fromqueue ODD

get2 from queue EVEN,thread name is: Thread-3get5 fromqueue ODD

get6 from queue EVEN,thread name is: Thread-3get7 fromqueue ODD

get8 from queue EVEN,thread name is: Thread-3get9 fromqueue ODD

get4 from queue EVEN,thread name is: Thread-3get 3 fromqueue ODD

All threads terminate!

python消息队列模块_day43-python消息队列二-queue模块相关推荐

  1. python queue 模块教程

    queue 模块即队列,特别适合处理信息在多个线程间安全交换的多线程程序中.下面我们对 queue 模块进行一个详细的使用介绍. 1 queue 模块定义的类和异常 queue 模块定义了以下四种不同 ...

  2. Python爬虫笔记——多协程(gevent and queue)

    1.爬取8个网站(包括百度.新浪.搜狐.腾讯.网易.爱奇艺.天猫.凤凰).用多协程gevent()模块来爬取. 这里有一个关于gevent的一些基础介绍的链接 Python并发之协程gevent基础( ...

  3. Python网络编程 8 缓存与消息队列

    前面已经介绍了套接字API以及在Python中使用的基础IP网络操作来构建通信信道的方式.本章研究服务负载较重时常用的两项基本技术:缓存与消息队列.这两项技术有如下一些共同特点: 都是非常强大的工具, ...

  4. python多进程之间的通信:消息队列Queue

    python中进程的通信:消息队列. 我们知道进程是互相独立的,各自运行在自己独立的内存空间. 所以进程之间不共享任何变量. 我们要想进程之间互相通信,传送一些东西怎么办? 需要用到消息队列!! 进程 ...

  5. Python 全栈系列122 redis消息队列搭建

    说明 不太喜欢rabbitmq之类的消息中间件,出问题不太好调试.打算使用redis替代. 内容 1 安装 1.1 版本 以docker方式安装,可以作为每台主机的一个标配.(其他的标配数据库还有mo ...

  6. python使用redis的消息队列_Redis实现简单消息队列

    任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大 ...

  7. python redis 消息队列_python中利用redis构建任务队列(queue)

    Python中的使用标准queue模块就可以建立多进程使用的队列,但是使用redis和redis-queue(rq)模块使这一操作更加简单. Part 1. 比如首先我们使用队列来简单的储存数据:我们 ...

  8. python 队列实现_python中实现队列的queue模块

    python中的queue模块提供了同步的.线程安全的队列类,包括FIFO(先进先出)的Queue类和LIFO(后进先出,栈结构)LifoQueue类和优先队列PriorityQueue类,它们都实现 ...

  9. 让python飞:形象理解python 栈、队列、lambda、生成器、迭代器、模块

    Day10 棒球和球棒与水晶火炉和五彩宝箱 棒球和球棒来到了足球场,要打棒球!但是球场工作人员不同意.棒球和球棒表示不服.球场工作人员说,这样吧,你按我们的规则完成任务,我们就让你们在这里玩.这里有两 ...

最新文章

  1. 从大麦网架构学到的东西
  2. android setlatesteventinfo 找不到,安卓通知的基本用法
  3. hdu 2021 发工资咯:)(c语言)
  4. JAVA刷TNT_Java Blocks.tnt方法代码示例
  5. vue 设置proxyTable - pathRewrite无效
  6. 打印英文年历C语言函数,C语言打印年历
  7. cpu时间片 linux,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
  8. 高中计算机表格制作,高中信息技术表格数据的处理教案
  9. 《东周列国志》第一百一回 秦王灭周迁九鼎 廉颇败燕杀二将
  10. 利用shell脚本解决区块链Fabric学习时下载Docker镜像失败和费时问题
  11. java文字生成水印图片
  12. SwiftUI iOS 开源组件之银行卡切换效果 (教程含源码)
  13. 推荐几款好用的书签收藏夹插件-让我们可以稍后阅读
  14. 联想小新 Pad和联想小新 Pad Pro有什么区别 哪个好详细性能配置对比
  15. 看完这篇文章,再也不怕 Elasticsearch 索引设计
  16. oralc 日期操作
  17. Vue状态管理--Pinia使用详解
  18. jsp页面几秒后自动跳转或者刷新
  19. 加利福尼亚大学研究报告:让AI自我怀疑以防人类被颠覆
  20. 创龙TI KeyStone C66x多核定点/浮点TMS320C6678 DSP开发板处理器、NAND FLASH、NOR FLASH

热门文章

  1. Android权限Uri.parse总结
  2. 如何下载防盗链的歌曲?
  3. Redo Log 和Checkpoint not complete
  4. ActiveBpel部署运行BPEL流程实例
  5. 设置ntpdate服务开机启动校验时间
  6. sql排名名次分页mysql_mysql 实现排名及中文排序实例[分页累加行号]
  7. python ftp下载文件_文件上传下载Python
  8. html调用js页面显示不出来了,JS代码文件调用显示乱码,直接写在html页面的里可以调用,但是单独放在js文件里不能调用...
  9. Java StreamTokenizer nextToken()方法与示例
  10. java 实现 堆排序算法_C程序实现堆排序算法