消息队列一
来源:互联网 发布:知乎同类软件 编辑:程序博客网 时间:2024/05/22 09:41
# 消息队列”是在消息的传输过程中保存消息的容器# 消息队列最经典的用法就是消费者和生成者之间通过消息管道来传递消息,消费者和生成者是不通的进程# 生产者往管道中写消息,消费者从管道中读消息# 操作系统提供了很多机制来实现进程间的通信,multiprocessing模块就提供了Queue和Pipe两种方法来实现from multiprocessing import Queue,Process# 写数据进程执行的代码: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('Put {0} from queue'.format(result))def main():# 父进程创建Queue,并传给各个子进程: q = Queue() pw = Process(target=write, args=(q,)) pr = Process(target=read, args=(q,)) # 启动子进程pw,写入: pw.start() # 启动子进程pr,读取: pr.start() # 等待pw结束: pw.join() # pr进程里是死循环,无法等待其结束,只能强行终止: pr.terminate()if __name__== '__main__':main()
# Pipe方法返回(conn1, conn2)代表一个管道的两个端。Pipe方法有duplex参数,如果duplex参数为True(默认值),# 那么这个管道是全双工模式,也就是说conn1和conn2均可收发。duplex为False,conn1只负责接受消息,conn2只负责发送消息。# send和recv方法分别是发送和接受消息的方法。close方法表示关闭管道,当消息接受结束以后,关闭管道def proc1(pipe): for i in xrange(1,10): pipe.send(i) print "send {0} to pip".format(i)def proc2(pipe): n = 9 while n>0: result = pipe.recv() print "recv {0} from pip".format(result) n -= 1 def main(): pipe = multiprocessing.Pipe(duplex=False) print(type(pipe)) # print(pipe) p1 = multiprocessing.Process(target=proc1, args=(pipe[1],)) p2 = multiprocessing.Process(target=proc2, args=(pipe[0],)) p1.start() p2.start() p1.join() p2.join() pipe[0].close() pipe[1].close()if __name__ == "__main__": main()
阅读全文
0 0
- Windows消息【一】 消息队列
- fqueue 消息队列(一)
- 消息队列一
- RabbitMQ消息队列一
- 消息队列(一)
- 消息队列(一)
- RabbitMQ消息队列(一)
- 学习消息队列(一)
- 消息队列一
- .Net消息队列学习(一)
- .Net消息队列学习(一)
- System V 消息队列(一)
- 消息队列 一(转)
- IPC主题一:消息队列
- 消息队列入门(一)关于消息队列
- Linux 消息队列、共享内存、信号量(一)消息队列
- IPC简单介绍(一)消息队列
- Android消息队列(一)--Handler使用
- XSHELL 绝佳配色方案, 保护你的眼睛
- 第12届D2 前端技术论坛直播通知
- 记一次Redhat7无法正常开机的解决过程
- 公共参数拦截器
- 拦截器OKhttp
- 消息队列一
- 带拦截器的okhttp封装类
- 把 bundle.out 读入内存中
- jsoup解析html简单总结
- android 模仿京东购物车
- Java 数组
- 实现商品的搜索功能
- 八周五次课(12月15日) 16.1 多进程的消息队列 16.2 消息队列pipe
- 世界各国用电电压介绍