1,IPC-PIPE:

管道 pipe

from multiprocessing import Process
from multiprocessing import Pipe
p1,p2 = Pipe() #支持双向通信
# send
p1.send('菠萝蜜干')
# recv
print(p2.recv())
p2.send('酸奶')
# p2.close()
print(p1.recv())
print(p1.recv()) #管道里没有值会报错: EOFError
2,用管道也能实现生产者消费者模型
 from multiprocessing import Process,Pipe,Lock

 def consumer(p,name,lock):
produce, consume=p
produce.close()
while True:
lock.acquire()
baozi=consume.recv()
lock.release()
if baozi:
print('%s 收到菠萝蜜干:%s' %(name,baozi))
else:
consume.close()
break def producer(p,n):
produce, consume=p
consume.close()
for i in range(n):
produce.send(i)
produce.send(None)
produce.send(None)
produce.close() if __name__ == '__main__':
produce,consume=Pipe()
lock = Lock()
c1=Process(target=consumer,args=((produce,consume),'c1',lock))
c2=Process(target=consumer,args=((produce,consume),'c2',lock))
p1=Process(target=producer,args=((produce,consume),10))
c1.start()
c2.start()
p1.start() produce.close()
consume.close() c1.join()
c2.join()
p1.join()
print('主进程')

3,IPC-Manager

import time
from multiprocessing import Manager
from multiprocessing import Process
# Manager是一个类 就提供了可以进行数据共享的一个机制 提供了很多数据类型 dict list
def func(dic):
print(dic)
while True:
print(dic)
time.sleep(3)
if __name__ == '__main__':
m = Manager()
d = m.dict({'count':0})
print(d)
p = Process(target=func,args=(d,))
p.start()
d['count'] = 0 from multiprocessing import Manager,Process,Lock
def work(d,lock):
lock.acquire()
d['count'] -= 1
lock.release() if __name__ == '__main__':
lock= Lock()
m = Manager()
dic=m.dict({'count':100}) # 共享的数据
l = []
for i in range(100):
p=Process(target=work,args=(dic,lock))
p.start()
l.append(p)
[p.join() for p in l]
print(dic)

Python:IPC-Pipe与IPC-Manger的更多相关文章

  1. [Chromium文档转载,第006章]Chrome IPC To Mojo IPC Cheat Sheet

    For Developers‎ > ‎Design Documents‎ > ‎Mojo‎ > ‎ Chrome IPC To Mojo IPC Cheat Sheet 目录 1 O ...

  2. AIDL/IPC Android AIDL/IPC 进程通信机制——超具体解说及使用方法案例剖析(播放器)

    首先引申下AIDL.什么是AIDL呢?IPC? ------ Designing a Remote Interface Using AIDL 通常情况下,我们在同一进程内会使用Binder.Broad ...

  3. Linux IPC Pipe

    mkfifo() //创建有名管道(FIFO special file),创建完了就像普通文件一样open(),再读写,成功返回0,失败返回-1设errno.VS$man 3 mkfifo #incl ...

  4. python多进程之IPC机制以及生产者消费者模型

    1.进程间通信(IPC机制) 第一种:管道 import subprocessres=subprocess.Popen('dir',shell=True, stdout=subprocess.PIPE ...

  5. python subprocess pipe 实时输出日志

    * test11.py import time print "1" time.sleep(2) print "1" time.sleep(2) print &q ...

  6. python管道pipe,两个进程,使用管道的两端分别执行写文件动作,带锁(lock)

    #coding=utf-8import multiprocessing as mp def write_file(content,lock):    lock.acquire()    with op ...

  7. System IPC 与Posix IPC(msg消息对列)

    系统消息队列: 一.消息队列基本概念 系统V消息队列是随内核持续的,只有在内核重起或者显示删除一个消息队列时,该消息队列才会真正被删除.因此系统中记录消息队列的数据结构(struct ipc_ids ...

  8. System IPC 与Posix IPC(共享内存)

    系统v(共享内存) 1.对于系统V共享内存,主要有以下几个API:shmget().shmat().shmdt()及shmctl(). 2.shmget()用来获得共享内存区域的ID,如果不存在指定的 ...

  9. System IPC 与Posix IPC(semaphore信号灯)

    POSIX下IPC主要包括三种: posix message queue posix semaphores posix shared memory sysytem v IPC包括: system v ...

  10. 大型项目必备IPC之其他IPC方式(二)

    阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680IPC的6种方式IPC是Inter-Process Communicati ...

随机推荐

  1. UML-2-迭代、进化和敏捷

    1.UP UP:Unified Process,统一过程.RUP:Rational Unified Process,Rational 公司制定的UP,是对UP的精细化. UP的过程: 初始 不是需求, ...

  2. java多线程-Thread

    大纲 sleep yield join setDaemon sleep: public static native void sleep(long millis) throws Interrupted ...

  3. DP Intro - OBST

    http://radford.edu/~nokie/classes/360/dp-opt-bst.html Overview Optimal Binary Search Trees - Problem ...

  4. 023-将表单序列化为json对象

    使用jQuery将表单序列化为json对象,其中serializeJson方法的名字任意,serializeArray()这个jQuery提供的方法.this指的就是谁调用了这个方法. $.fn.se ...

  5. pat02-线性结构4. Pop Sequence (25)

    02-线性结构4. Pop Sequence (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given ...

  6. pat1006. Sign In and Sign Out (25)

    1006. Sign In and Sign Out (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ...

  7. MYSQL冷知识——ON DUPLICATE KEY 批量增删改

    一 有个需求要批量增删改,并且是混合的,也就是仅不存在才增. 删简单,因为有个deleteStaute之类的字段,删除本质上就是就是一个修改 所以就是实现批量混合增改,然而组长说mysql不支持混合增 ...

  8. C# .net页面乱码

    可在web.config中设置 <globalization requestEncoding="utf-8" responseEncoding="utf-8&quo ...

  9. 使用 Azure CLI 创建虚拟机

    使用 az vm create 命令创建虚拟机. 创建虚拟机时,可使用多个选项,例如操作系统映像.磁盘大小调整和管理凭据. 在此示例中,创建了一个名为“myVM”的运行 Ubuntu Server 的 ...

  10. node.js获取cookie

    node.js 获取cookie var Cookies ={}; if (req.headers.cookie != null) { req.headers.cookie.split(';').fo ...