Python消息队列
消息中间件 --->就是消息队列
异步方式:不需要立马得到结果,需要排队
同步方式:需要实时获得数据,坚决不能排队
例子:
#多进程模块multiprocessing
from multiprocessing import Process
from multiprocessing import Queue
def write(q):
for i in ["a", "b", "c", "d"]:
q.put(i)
print ("put {0} to queue".format(i))
def read(q):
while 1:
result = q.get()
print ("get {0} from queue".format(result))
#写一个主函数
def main():
q = Queue()
pw = Process(target=write, args=(q,))
pr = Process(target=read, args=(q,))
pw.start()
pr.start()
pw.join()
#终止pr线程
pr.terminate()
if __name__ == '__main__':
#调用主函数
main()
输出:
put a to queue
put b to queue
put c to queue
put d to queue
多进程模块multiprocessing中pipe方法实现消息队列
例子:
from multiprocessing import Pipe, Process
import time
def proce1(pipe):
for i in xrange(1, 10):
pipe.send(i)
print ("send {0} to pipe".format(i))
time.sleep(1)
def proce2(pipe):
n = 9
while n > 0 :
result = pipe.recv()
print ("recv {0} from pipe".format(result))
def main():
pipe = Pipe(duplex=False)
print (type(pipe))
p1 = Process(target=proce1, args=(pipe[1],))
p2 = Process(target=proce2, args=(pipe[0],))
p1.start()
p2.start()
p1.join()
p2.join()
pipe[0].close()
pipe[1].close()
if __name__ == '__main__':
main()
输出:
<type 'tuple'>
send 1 to pipe
recv 1 from pipe
recv 2 from pipe
send 2 to pipe
recv 3 from pipe
send 3 to pipe
recv 4 from pipe
send 4 to pipe
send 5 to pipe
recv 5 from pipe
recv 6 from pipe
send 6 to pipe
send 7 to pipe
recv 7 from pipe
send 8 to pipe
recv 8 from pipe
send 9 to pipe
recv 9 from pipe
模仿生产者和消费者的多线程消息队列练习
例子:
from threading import Thread
from multiprocessing import Queue
import time
class Proceduer(Thread):
def __init__(self, queue):
super(Proceduer, self).__init__()
self.queue = queue
def run(self):
try:
for i in xrange(1, 10):
print ("put data is {0} to queue".format(i))
self.queue.put(i)
except Exception as e:
print ("put data error")
raise e
class Consumer_odd(Thread):
def __init__(self, queue):
super(Consumer_odd, self).__init__()
self.queue = queue
def run(self):
try:
while not self.queue.empty:
number = self.queue.get()
if number%2 != 0:
print ("get {0} from queue odd. thread name is {1}".format(number, self.getName()))
else:
self.queue.put(number)
time.sleep(1)
except Exception as e:
raise e
class Consumer_even(Thread):
def __init__(self, queue):
super(Consumer_even, self).__init__()
self.queue = queue
def run(self):
try:
while not self.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)
except Exception as e:
raise e
def main():
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 thread terminate")
if __name__ == '__main__':
main()
转载于:https://blog.51cto.com/culiangmianbao/2051917
Python消息队列相关推荐
- python消息队列celery高可用_分布式消息队列-Celery
怎么能不恨呢,在我发现自己是恶鬼的时候,在我最绝望最虚弱的时候,这个世上最该跟我在一起的人却用刀把我的心刺穿了 Celery 是 Distributed Task Queue,分布式任务队列.分布式决 ...
- python 消息队列、异步分布式
一.消息队列 消息队列:是在消息的传输过程中保存消息的容器. 消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不同的进程.生产者往管道中写消息,消费者从管道中读消息. ...
- python 消息队列 get是从队首还是队尾取东西_python分布式爬虫中消息队列知识点详解...
当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...
- python消息队列中间件_python-RabbtiMQ消息队列
1.RabbitMQ简介 AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.消息中间件主要用于组件之 ...
- python消息队列模块_day43-python消息队列二-queue模块
Python提供了Queue模块来专门实现消息队列Queue对象 Queue对象实现一个fifo队列(其他的还有lifo.priority队列,这里不再介绍).queue只有maxsize一个构造参数 ...
- python消息队列celery_【干货分享】NTI任务管理之django+python篇celery异步任务使用...
阅读: 3,538 新浪微博的新鲜事推送如何实现?大规模的服务器如何实现Crontab管理?里面的秘密就在于消息队列.Celery是一个使用Python开发的分布式任务调度模块,是一个简单.灵活.可靠 ...
- python消息队列中间件_常见的消息队列中间件介绍
题目 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 什么是消息队列 在正式介绍和对比Kafka. ...
- python消息队列_python之消息队列
消息持久化 acknowledgment 消息不丢失的方法 生效方法:channel.basic_consume(consumer_callback, queue, no_ack=False, exc ...
- python 消息队列 flask_python分布式爬虫中消息队列知识点详解
当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的 ...
- python消息队列框架_awesome asyncio-精选python异步框架清单集合
Python 3.4引入标准库的Python asyncio模块提供了使用协程编写单线程并发代码,通过套接字和其他资源对I / O进行多路访问,运行网络客户端和服务器以及其他相关原语的基础结构. As ...
最新文章
- ffmpeg rtsp转 rtmp
- CTFshow 文件上传 web156
- 对象作为参数示例java_功能Java示例 第6部分–用作参数
- hihocoder [Offer收割]编程练习赛24
- 计算机网络(十七)-局域网
- chrome 63 android分类,Chrome 63 Beta新特性介绍
- Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
- 业界分享 | 阿里达摩院:超大规模预训练语言模型落地实践
- python能和java一起编程吗_C如何能和Python一起编程,那么它们已经无敌了!Java靠边站!...
- vue 刷新嵌套路由_vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法...
- mapbox 将坐标转换成米
- python调用windows api_python 调用win32 api
- python聚类分析实例_Biopython - 聚类分析
- 淘宝客如何赚钱?为什么很多人做淘宝客赚不到钱?
- 广义线性模型之指数分布族期望和方差的推导
- python制作APP,此APP可识别TEM图片结构轮廓,并将坐标提取到excel中,画出TEM结构轮廓图(tkinter,opencv-python)
- 云原生中间件RocketMQ-核心原理之高可用机制
- 人工智能行业每日必读(01·17)
- Linux之创建、删除文件及目录命令touch、echo、mkdir、rm、rmdir
- php date函数时间不对,PHP Date / Time 日期和时间 函数和时间相差8小时解决办法
热门文章
- 从零学ELK系列(二):VMware安装Centos(超详细图文教程)
- GitHub标星7700:Python从新手到大师,只要100天
- 官方钦定TensorFlow2.0要改这个API,用户吐槽:全世界都是keras
- 英伟达的“千人摩擦计划”:几千个智能体互相玩耍,学习跑酷更轻松
- 马斯克召集百名员工测试完全自动驾驶,1.3万美元大优惠!先到先得
- Google是否投资你,得看AI支持不支持
- 陈天奇的tvm更新了:VTA,开源AI芯片栈
- 怎样三天训练出AI围棋大师?教你AlphaGo Zero的3个trick
- Python数据可视化1.5 可视化图像
- dwz ajax session超时跳转登录页(struts2自定义阻碍器)