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 ...
随机推荐
- this逃逸
首先,什么是this逃逸? this逃逸是指类构造函数在返回实例之前,线程便持有该对象的引用. 常发生于在构造函数中启动线程或注册监听器. eg: public class ThisEscape { ...
- 20145334赵文豪《网络对抗》-逆向及Bof基础实践
本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返 ...
- MAKEFILE 编程基础之一【转】
本文转载自:http://www.himigame.com/gcc-makefile/766.html 概述: 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Wind ...
- MVC5 一套Action的登录控制流程
流程: 用拦截器控制每一个页面请求和ajax请求,根据请求体的cookie里面是否有token判断是否登录,还必须判断该token在redis里面的缓存是否存在 组成部分: 拦截器: using Sy ...
- 51nod 1202 子序列个数
1202 子序列个数 题目来源: 福州大学 OJ 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 子序列的定义:对于一个序列a=a[1],a[2] ...
- rg.apache.ibatis.binding.BindingException: Mapper method 'com.dao.Cameao.getOnlineDayRation attempted to return null from a method with a primitive return type (float)
本文为博主原创,未经允许不得转载: 异常展示如下: org.apache.ibatis.binding.BindingException: Mapper method 'com.dao.Cameao. ...
- Cocos2d-x学习笔记(九)场景切换
这里只介绍两个简单的两个场景相互切换的方法. void pushScene(Scene *sn)和void popScene(Scene *sn)是一对.前者将当前场景放入到场景堆栈中,并切换到下一个 ...
- 浅谈PHP5中垃圾回收算法
原文链接:http://www.cnblogs.com/leoo2sk/archive/2011/02/27/php-gc.html PHP是一门托管型语言,在PHP编程中程序员不需要手工处理内存资源 ...
- nodejs+gulpjs压缩js代码
1.安装node.js 下载地址:nodejs.org 或者 nodejs.cn 2.安装gulp之前我们需要安装nodejs的环境,检测能够正常使用npm后,我们用npm对gulp进行一次全局安 ...
- MongoDB(课时11 嵌套集合)
3.4.2.6 嵌套集合运算 MongoDB数据库里每个集合数据可以继续保存其它的集合数据.例如:有些学生信息中需要保存家长信息. 范例: 增加数据 db.students.insert({" ...