python-day33--进程间通信(IPC)
方式:队列(推荐使用)
一、基本情况
1.可以往队列里放任意类型的数据
2. 队列:先进先出
3.
q=Queue(3) #可以设置队列中最多可以进入多少个值,也可以不设置
q.put('first')
q.put('second')
q.put('third')
# q.put('fourht') #当设置最多进入3个值时,第四个值过来时就会卡住,只有当第一值 被取出去的时候,第四个值才会进入 print(q.get())
print(q.get())
print(q.get())
# print(q.get()) #当队列中有三个值,而想去取第四个值的时候,也会卡住,只有队列中进入了第四个值的时候才往下运行
4.生产者消费者模型
#生产者消费者模型1
# from multiprocessing import Process,Queue
# import time
# import random
# import os
# def consumer(q):
# while True:
# res=q.get()
# if res is None:
# break
# time.sleep(random.randint(1,3))
# print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res))
# def producer(q):
# for i in range(5):
# time.sleep(2)
# res='包子%s' %i
# q.put(res)
# print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
# q.put(None)
# if __name__ == '__main__':
# q=Queue()
# #生产者们:厨师们
# p1=Process(target=producer,args=(q,))
#
# #消费者们:吃货们
# p2=Process(target=consumer,args=(q,))
#
# p1.start()
# p2.start()
# p1.join()
# p2.join()
# print('主') # #生产者消费者模型2
# from multiprocessing import Process,Queue
# import time
# import random
# import os
# def consumer(q):
# while True:
# res=q.get()
# if res is None:break
# time.sleep(random.randint(1,3))
# print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res))
#
# def product_baozi(q):
# for i in range(3):
# time.sleep(2)
# res='包子%s' %i
# q.put(res)
# print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
#
#
# def product_gutou(q):
# for i in range(3):
# time.sleep(2)
# res='骨头%s' %i
# q.put(res)
# print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
#
#
# def product_ganshui(q):
# for i in range(3):
# time.sleep(2)
# res='泔水%s' %i
# q.put(res)
# print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
# if __name__ == '__main__':
# q=Queue()
# #生产者们:厨师们
# p1=Process(target=product_baozi,args=(q,))
# p2=Process(target=product_gutou,args=(q,))
# p3=Process(target=product_ganshui,args=(q,))
#
# #消费者们:吃货们
# p4=Process(target=consumer,args=(q,))
# p5=Process(target=consumer,args=(q,))
#
# # p_l=[p1,p2,p3,p4,p5]
# # for p in p_l:
# # p.start()
# #
# # for p in p_l:
# # p.join()
#
#
# p1.start()
# p2.start()
# p3.start()
# p4.start()
# p5.start()
#
#
# p1.join()
# p2.join()
# p3.join()
# q.put(None)
# q.put(None)
# p4.join()
# p5.join()
#
# print('主') # #生产者消费者模型3
# from multiprocessing import Process,JoinableQueue
# import time
# import random
# import os
# def consumer(q):
# while True:
# res=q.get()
# time.sleep(random.randint(1,3))
# print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res))
# q.task_done()
#
# def product_baozi(q):
# for i in range(5):
# time.sleep(2)
# res='包子%s' %i
# q.put(res)
# print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
# q.join()
#
# if __name__ == '__main__':
# q=JoinableQueue()
# #生产者们:厨师们
# p1=Process(target=product_baozi,args=(q,))
#
# #消费者们:吃货们
# p4=Process(target=consumer,args=(q,))
# p4.daemon=True
#
# p1.start()
# p4.start()
#
# p1.join()
# print('主')
# #p2结束了 #生产者消费者模型4
from multiprocessing import Process,JoinableQueue
import time
import random
import os
def consumer(q):
while True:
res=q.get()
time.sleep(random.randint(1,3))
print('\033[45m%s 吃了 %s\033[0m' % (os.getpid(), res))
q.task_done() def product_baozi(q):
for i in range(3):
time.sleep(2)
res='包子%s' %i
q.put(res)
print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
q.join() def product_gutou(q):
for i in range(3):
time.sleep(2)
res='骨头%s' %i
q.put(res)
print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
q.join() def product_ganshui(q):
for i in range(3):
time.sleep(2)
res='泔水%s' %i
q.put(res)
print('\033[44m%s 制造了 %s\033[0m' %(os.getpid(),res))
q.join()
if __name__ == '__main__':
q=JoinableQueue()
#生产者们:厨师们
p1=Process(target=product_baozi,args=(q,))
p2=Process(target=product_gutou,args=(q,))
p3=Process(target=product_ganshui,args=(q,)) #消费者们:吃货们
p4=Process(target=consumer,args=(q,))
p5=Process(target=consumer,args=(q,))
p4.daemon=True
p5.daemon=True p_l=[p1,p2,p3,p4,p5]
for p in p_l:
p.start() p1.join()
p2.join()
p3.join() print('主')
生产者消费者模型进阶
python-day33--进程间通信(IPC)的更多相关文章
- Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
- Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
- Linux进程间通信IPC学习笔记之消息队列(SVR4)
Linux进程间通信IPC学习笔记之消息队列(SVR4)
- Android进程间通信IPC
一.IPC的说明 IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程. IPC不是Android独有的,任何一个操作 ...
- 进程间通信IPC -- 管道, 队列
进程间通信--IPC(Inter-Process Communication) 管道 from multiprocessing import Pipecon1,con2 = Pipe()管道是不安全的 ...
- [原创]chromium源码阅读-进程间通信IPC.消息的接收与应答
chromium源码阅读-进程间通信IPC.消息的接收与应答 chromium源码阅读-进程间通信IPC.消息的接收与应答 介绍 chromium进程间通信在win32下是通过命名管道的方式实现的 ...
- 进程间通信IPC之--无名管道(pipe)和有名管道(fifo)(转)
进程间通信IPC之--无名管道(pipe)和有名管道(fifo) 2012-01-17 22:41:20 分类: C/C++ 每个进程各自有不同的用户地址空间,任何一个进 程的全局变量在另一个进程中 ...
- 进程间通信IPC、LPC、RPC
进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法.进程是计算机系统分配资源的最小单位.每个进程都有自己的一部分独立的系 ...
- 【Android】进程间通信IPC——Binder
Binder是Android中的跨进程通信方式,bindService的时候,服务端返回Binder对象,通过该对象客户端可以从服务端获取数据.在进程间通信IPC——AIDL中创建了ICustomAi ...
- 【Android】进程间通信IPC——AIDL
AIDL官网定义AIDL(Android 接口定义语言)与您可能使用过的其他 IDL 类似. 您可以利用它定义客户端与服务使用进程间通信 (IPC) 进行相互通信时都认可的编程接口. 在 Androi ...
随机推荐
- linux服务器---安装samba
安装samba 1.检测samba是否安装,如果没有,那么可以使用yum来安装.至少需要安装3个软件:samba,samba-client.samba-common [root@localhost p ...
- (一)github之基础概念篇
1.github: 一项为开发者提供git仓库的托管服务, 开发者间共享代码的场所.github上公开的软件源代码全都由git进行管理. 2.git: 开发者将源代码存入名为git仓库的资料库中,而g ...
- PHP实现多进程并行操作,可做守护进程(转,备用)
<?php /** * 入口函数 * 将此文件保存为 ProcessOpera.php * 在terminal中运行 /usr/local/php/bin/php ProcessOpera.ph ...
- 在服务中用管理员权限创建一个可弹出UI的进程 (转载)
转载:http://blog.csdn.net/woshinia/article/details/7850295 转载:http://blog.csdn.net/hurryboylqs/article ...
- 主引导记录MBR的结构和作用
MBR磁盘分区都有一个引导扇区,称为主引导记录,英文简称为MBR.1. MBR的结构MBR扇区位于整个硬盘的第一个扇区:按照C/H/S地址描述,即0柱面〇磁头1扇 区:按照LBA地址描述即0扇区.它是 ...
- Tempter of the Bone(dfs+奇偶剪枝)题解
Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Othe ...
- UVA 11426 GCD - Extreme (II) (欧拉函数)题解
思路: 虽然看到题目就想到了用欧拉函数做,但就是不知道怎么做... 当a b互质时GCD(a,b)= 1,由此我们可以推出GCD(k*a,k*b)= k.设ans[i]是1~i-1与i的GCD之和,所 ...
- C#面试题集锦
1.貌似最常用的是 值类型和引用类型,还有 装箱和 http://www.cnblogs.com/Autumoon/archive/2008/08/18/1270685.html http://ww ...
- VS2010下创建WEBSERVICE,第二天 ----你会在C#的类库中添加web service引用吗?
本文并不是什么高深的文章,只是VS2008应用中的一小部分,但小部分你不一定会,要不你试试: 本人对于分布式开发应用的并不多,这次正好有一个项目要应用web service,我的开发环境是vs2008 ...
- 桌面共享UDP组播实现
组播(Multicast)传输:在发送者和每一接收者之间实现点对多点网络连接.如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现拥塞的 ...