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 ...
随机推荐
- selinux配置错误实例介绍
错误原因 配置关闭SELinux,结果误操作 应修改配置文件/etc/selinux/config中的“SELINUX”参数的值, # SELINUX=enforcing 原始配置 SELINUX= ...
- MySQL笔记(三)由txt文件导入数据
改编自学校实验,涉及一些字符集相关的问题. 索引 建库 导入数据 最终脚本 下载数据 点击这里 建库 create.sql DROP DATABASE IF EXISTS orderdb; CREAT ...
- ELK学习笔记之Logstash和Filebeat解析对java异常堆栈下多行日志配置支持
0x00 概述 logstash官方最新文档.假设有几十台服务器,每台服务器要监控系统日志syslog.tomcat日志.nginx日志.mysql日志等等,监控OOM.内存低下进程被kill.ngi ...
- Python3基础 str endswith 是否以指定字符串结束
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 一种斐波那契博弈(Fibonacci Nim)
事实上我也不知道这算是哪个类型的博弈 是在复习$NOIP$初赛的时候看到的一个挺有趣的博弈 所以就写出来分享一下 $upd \ on \ 2018.10.12$忽然发现这个其实就是$Fibonacci ...
- Vue项目中使用Vuex + axios发送请求
本文是受多篇类似博文的影响写成的,内容也大致相同.无意抄袭,只是为了总结出一份自己的经验. 一直以来,在使用Vue进行开发时,每当涉及到前后端交互都是在每个函数中单独的写代码,这样一来加大了工作量,二 ...
- [JavaScript] - form表单转json的插件
jquery.serializejson.js 之前好像记录过,做项目又用到了再记下 在页面中引入js后就可以使用了 示例: //点击设置微信信息的form表单提交按钮后,执行wxConfig的con ...
- 项目梳理5——修改已生成.nuspec文件
xxxx.nuspec格式如下 <?xml version="1.0"?> <package > <metadata> <id>$i ...
- Pytorch版本yolov3源码阅读
目录 Pytorch版本yolov3源码阅读 1. 阅读test.py 1.1 参数解读 1.2 data文件解析 1.3 cfg文件解析 1.4 根据cfg文件创建模块 1.5 YOLOLayer ...
- 04_Flume多节点load_balance实践
1.负载均衡场景 1)初始:上游Agent通过round_robin selector, 将event轮流发送给下游Collecotor1, Collector2 2)故障: 关闭Collector1 ...