python消息队列模块_day43-python消息队列二-queue模块
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模块相关推荐
- python queue 模块教程
queue 模块即队列,特别适合处理信息在多个线程间安全交换的多线程程序中.下面我们对 queue 模块进行一个详细的使用介绍. 1 queue 模块定义的类和异常 queue 模块定义了以下四种不同 ...
- Python爬虫笔记——多协程(gevent and queue)
1.爬取8个网站(包括百度.新浪.搜狐.腾讯.网易.爱奇艺.天猫.凤凰).用多协程gevent()模块来爬取. 这里有一个关于gevent的一些基础介绍的链接 Python并发之协程gevent基础( ...
- Python网络编程 8 缓存与消息队列
前面已经介绍了套接字API以及在Python中使用的基础IP网络操作来构建通信信道的方式.本章研究服务负载较重时常用的两项基本技术:缓存与消息队列.这两项技术有如下一些共同特点: 都是非常强大的工具, ...
- python多进程之间的通信:消息队列Queue
python中进程的通信:消息队列. 我们知道进程是互相独立的,各自运行在自己独立的内存空间. 所以进程之间不共享任何变量. 我们要想进程之间互相通信,传送一些东西怎么办? 需要用到消息队列!! 进程 ...
- Python 全栈系列122 redis消息队列搭建
说明 不太喜欢rabbitmq之类的消息中间件,出问题不太好调试.打算使用redis替代. 内容 1 安装 1.1 版本 以docker方式安装,可以作为每台主机的一个标配.(其他的标配数据库还有mo ...
- python使用redis的消息队列_Redis实现简单消息队列
任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器,服务器处理请求,返回响应(response)内容. 我们每天都在浏览网页,发送大大 ...
- python redis 消息队列_python中利用redis构建任务队列(queue)
Python中的使用标准queue模块就可以建立多进程使用的队列,但是使用redis和redis-queue(rq)模块使这一操作更加简单. Part 1. 比如首先我们使用队列来简单的储存数据:我们 ...
- python 队列实现_python中实现队列的queue模块
python中的queue模块提供了同步的.线程安全的队列类,包括FIFO(先进先出)的Queue类和LIFO(后进先出,栈结构)LifoQueue类和优先队列PriorityQueue类,它们都实现 ...
- 让python飞:形象理解python 栈、队列、lambda、生成器、迭代器、模块
Day10 棒球和球棒与水晶火炉和五彩宝箱 棒球和球棒来到了足球场,要打棒球!但是球场工作人员不同意.棒球和球棒表示不服.球场工作人员说,这样吧,你按我们的规则完成任务,我们就让你们在这里玩.这里有两 ...
最新文章
- 从大麦网架构学到的东西
- android setlatesteventinfo 找不到,安卓通知的基本用法
- hdu 2021 发工资咯:)(c语言)
- JAVA刷TNT_Java Blocks.tnt方法代码示例
- vue 设置proxyTable - pathRewrite无效
- 打印英文年历C语言函数,C语言打印年历
- cpu时间片 linux,能讲一下在Linux系统中时间片是怎么分配的还有优先级的具体算法是...
- 高中计算机表格制作,高中信息技术表格数据的处理教案
- 《东周列国志》第一百一回 秦王灭周迁九鼎 廉颇败燕杀二将
- 利用shell脚本解决区块链Fabric学习时下载Docker镜像失败和费时问题
- java文字生成水印图片
- SwiftUI iOS 开源组件之银行卡切换效果 (教程含源码)
- 推荐几款好用的书签收藏夹插件-让我们可以稍后阅读
- 联想小新 Pad和联想小新 Pad Pro有什么区别 哪个好详细性能配置对比
- 看完这篇文章,再也不怕 Elasticsearch 索引设计
- oralc 日期操作
- Vue状态管理--Pinia使用详解
- jsp页面几秒后自动跳转或者刷新
- 加利福尼亚大学研究报告:让AI自我怀疑以防人类被颠覆
- 创龙TI KeyStone C66x多核定点/浮点TMS320C6678 DSP开发板处理器、NAND FLASH、NOR FLASH
热门文章
- Android权限Uri.parse总结
- 如何下载防盗链的歌曲?
- Redo Log 和Checkpoint not complete
- ActiveBpel部署运行BPEL流程实例
- 设置ntpdate服务开机启动校验时间
- sql排名名次分页mysql_mysql 实现排名及中文排序实例[分页累加行号]
- python ftp下载文件_文件上传下载Python
- html调用js页面显示不出来了,JS代码文件调用显示乱码,直接写在html页面的里可以调用,但是单独放在js文件里不能调用...
- Java StreamTokenizer nextToken()方法与示例
- java 实现 堆排序算法_C程序实现堆排序算法